【发布时间】:2015-01-31 07:57:46
【问题描述】:
带有模型的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
那么现在来回答问题,
- 在 ICarLogic 的实现者上调用 Update 时,是否应该检查每个属性(例如 AvailableConfigurations),以查看数据库中不存在的需要添加的内容,以及应该删除数据库中而不是 IEnumberable 中的内容然后从那里更新所有表格?
- 我们是否应该分出 READ 查询,如所示、GetAll、GetByManufacturer 等,因为我们的许多模型都会有几个,那么我们是否进入 GetAllWithConfigurationsAnd....当调用者甚至不需要这些信息时,模型将有多达 10 个连接?
【问题讨论】:
-
就我个人而言,我不喜欢 GetByManufacturer 等众多方法的规范。问题是它们扩展和增长并变得难以管理。您是否还想限制用户使用您提供的过滤器。我更喜欢创建一个利用数据源元数据并具有过滤器集合的“查询”对象
标签: c# .net n-tier-architecture