Projeto possui interfaces para implementar os patterns repository, specification, service domain.
Utilize o pacote do nuget Core.Domain para instalar.
Install-Package Core.Domain -Version 2.1.1
or
dotnet add package Core.Domain --version 2.1.1
using Core.Domain;
using System;
using System.ComponentModel.DataAnnotations;
namespace CompanyName.ProductName.Domain.Entities
{
public class CustomerEntity : Entity
{
[Key]
public int ID { get; set; }
//your customer properties
public override Core.Domain.ValidationResult IsValid()
{
var validation = new Validation.CustomerValidation();
return validation.Validate(this);
}
}
}
using Core.Domain;
using CompanyName.ProductName.Domain.Entities;
namespace CompanyName.ProductName.Domain.Interfaces.Repository
{
public interface ICustomerRepository : IRepository<CustomerEntity>
{
}
}
using Core.Domain;
using CompanyName.ProductName.Domain.Entities;
namespace CompanyName.ProductName.Domain.Interfaces.Services
{
public interface ICustomerService : IService<CustomerEntity>
{
}
}
using Core.Infra;
using CompanyName.ProductName.Domain.Entities;
using CompanyName.ProductName.Domain.Interfaces.Repository;
using CompanyName.ProductName.Infra.Data.Context;
namespace CompanyName.ProductName.Infra.Data.Repositories
{
public class CustomerRepository : Repository<CustomerEntity, ProdDbContext>, ICustomerRepository
{
public CustomerRepository(ProdDbContext db)
: base(db) { }
}
}
using Core.Domain;
using CompanyName.ProductName.Domain.Entities;
using CompanyName.ProductName.Domain.Interfaces.Repository;
using CompanyName.ProductName.Domain.Interfaces.Services;
namespace CompanyName.ProductName.Domain.Services
{
public class CustomerService : Service<CustomerEntity>, ICustomerService
{
private readonly ICustomerRepository _customerRepository;
public CustomerService(ICustomerRepository customerRepository)
: base(customerRepository)
{
_customerRepository = customerRepository;
}
}
}
using Core.Domain;
using CompanyName.ProductName.Domain.Entities;
using CompanyName.ProductName.Domain.Validation.Customer;
namespace CompanyName.ProductName.Domain.Validation
{
public class CustomerValidation : FiscalBase<CustomerEntity>
{
public CustomerValidation()
{
var nameValidation = new NameValidation();
base.AddRule("nameValidation", new Rule<CustomerEntity>(nameValidation, "Invalid customer name"));
}
}
}
using Core.Domain;
using CompanyName.ProductName.Domain.Entities;
namespace CompanyName.ProductName.Domain.Validation.Customer
{
public class NameValidation : ISpecification<CustomerEntity>
{
public bool IsSatisfiedBy(CustomerEntity customerEntity)
{
//your validation
return true;
}
}
}
MIT license.