NTier逻辑层与模型,处理CRUD

时间:2014-12-02 22:19:47

标签: c# .net n-tier-architecture

NTier逻辑层与模型,处理CRUD

我的团队正在考虑重新架构我们的某些系统以满足以下模式

  • 数据层(实体框架支持,数据库优先)
  • 模型(POCOS,与DAL中的模型不同)
  • 逻辑层(对数据层和模型的引用)
  • ASP.NET演示文稿

我们有一些模型,如:

public class Configuration
{
   public int Id {get;set;}
   public string Description {get;set;}
}

public class Manufacturer
{
   public int Id {get;set;}
   public string Description {get;set;}
}

public class Car
{
   public int Id {get;set;}
   public string Name {get;set;}
   public Manufacturer Make {get;set;}
   public IEnumberable<Configuration> AvailableConfigurations {get;set;}

}

在逻辑层,我们有一个类似

的CarLogic类
public interface ICarLogic
{
   void Add(Car);
   void Update(Car);
   void Delete(Car);
   void GetAll(Car);
   void GetByManufacturer(ManfacturerId);
}

数据库架构

表:汽车 列:Id,模型

表:配置 列:Id,描述

表:制造商 列:Id,描述

表:Car_Configs 列:Car_Id_Fk,Configuration_Id_Fk

现在问题,

  1. 在ICarLogic的实现者上调用Update时,是否应检查每个属性(如AvailableConfigurations)以查看数据库中不存在的内容并需要添加,数据库中的内容是什么,而不是应删除的IEnumberable中的内容然后从那里做所有的表更新?
  2. 我们是否应该显示READ查询,例如显示,GetAll,GetByManufacturer等,因为我们的许多模型都有几个,然后我们进入GetAllWithConfigurationsAnd .... GetByManufacturer,GetByManufacturerWithConfigurations,或者只是总是包含属性,即使有些如果调用者甚至不需要该信息,那么模型最多可以有10个连接?

1 个答案:

答案 0 :(得分:0)

这可能是CQRS设计模型更适合的一个很好的例子。

关于你的问题:

1)我个人将更新拆分为:更新Car的基本属性,以及单独添加/更新/删除给定汽车配置的方法。这基本上是为了避免每次检查所有可用配置的更改内容。

2)我将定义为有问题的viewmodel创建所需的最小READ查询。