我应该如何在层之间进行通信并优化我的代码?

时间:2017-09-12 13:32:00

标签: c# n-tier-architecture

我正在使用C#构建REST Web API。我的代码分为4层:

  
      
  • 模型
  •   
  • 存储库
  •   
  • 服务
  •   
  • Web API
  •   

如何有效地连接服务和存储库模型,而无需重复代码?现在,我的一个Service Layer类看起来像这样:

Install-Package Microsoft.SqlServer.Types

这让我觉得非常有用,我发现自己写了很多几乎相同的课程?有任何想法吗?感谢

1 个答案:

答案 0 :(得分:2)

您的问题没有简单或简短/快速的答案。此外,在设计系统架构时会发挥很多变量。我只想提出一些通用建议:

  • 尽可能晚地做出决定,在做出更好的决定之前,你拥有的知识越多
  • 原型,以较小的比例尝试概念

对于特定的代码示例,通常的做法是在注入操作时将代码隔离在单个位置(服务),并将其用作跟随DRY的命令。此外,它避免了重构时的不一致。

考虑例子:

public class ContactosService : IContactosService
{
    private readonly IContactRepository repository;

    public ContactosService(IContactRepository repository)
    {
        this.repository = repository;
    }

    public void AddContact(Contact_mdl value)
    {
        repository.Execute(rep => rep.Add(value));
    }

    public void DeleteContact(int id)
    {
        repository.Execute(rep => rep.Delete(id));
    }
}

public class ContactRepository : IContactRepository
{
    private readonly string _empresaId;
    public ContactRepository(string empresaId)
    {
         _empresaId = empresaId;
    }

    public void Execute(Action<Contact_rep> command)
    {
        using (var myCon = new AdoNetContext(new AppConfigConnectionFactory(_empresaId)))
        {
            using (var rep = new Contact_rep(myCon))
            {
                command(rep);
            }
        }
    }
}