Skip to content

flaviorl-net/Core

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Core

Projeto possui interfaces para implementar os patterns repository, specification, service domain.

Installation

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

Usage

Entity

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);
        }
    }
}

Repository Interface

using Core.Domain;
using CompanyName.ProductName.Domain.Entities;

namespace CompanyName.ProductName.Domain.Interfaces.Repository
{
    public interface ICustomerRepository : IRepository<CustomerEntity>
    {
    }
}

Service Domain Interface

using Core.Domain;
using CompanyName.ProductName.Domain.Entities;

namespace CompanyName.ProductName.Domain.Interfaces.Services
{
    public interface ICustomerService : IService<CustomerEntity>
    {
    }
}

Repository

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) { }
    }
}

Service Domain

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;
        }
    }
}

Validation Domain

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"));
        }
    }
}

Name Customer Validation

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;
        }
    }
}

Licenses

MIT license.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages