【问题标题】:NTier logic layers with models, handling CRUD带有模型的 NTier 逻辑层,处理 CRUD
【发布时间】: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

那么现在来回答问题,

  1. 在 ICarLogic 的实现者上调用 Update 时,是否应该检查每个属性(例如 AvailableConfigurations),以查看数据库中不存在的需要添加的内容,以及应该删除数据库中而不是 IEnumberable 中的内容然后从那里更新所有表格?
  2. 我们是否应该分出 READ 查询,如所示、GetAll、GetByManufacturer 等,因为我们的许多模型都会有几个,那么我们是否进入 GetAllWithConfigurationsAnd....当调用者甚至不需要这些信息时,模型将有多达 10 个连接?

【问题讨论】:

  • 就我个人而言,我不喜欢 GetByManufacturer 等众多方法的规范。问题是它们扩展和增长并变得难以管理。您是否还想限制用户使用您提供的过滤器。我更喜欢创建一个利用数据源元数据并具有过滤器集合的“查询”对象

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


【解决方案1】:

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

关于您的问题:

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

2) 我将明确地为相关视图模型创建所需的最少 READ 查询。

【讨论】:

  • 你会做什么验证?我们正在考虑视图模型上的验证函数,它返回错误对象的 IEnumberable 和逻辑层,如果您尝试在无效模型的逻辑中执行操作,那么它会引发验证异常。
  • 如果这很好,它应该检查不同模型的每个 IEnumerable 还是单独运行每个?
  • 你的意思是一个 IEnumerable 来保存你的汽车可用配置的所有验证错误,如果有的话?我倾向于将这些验证消息包装在一个非常简单的类中,例如 public class AjaxResult { public bool Success {get;set;} public string ErrorMessage { get;set; } }
猜你喜欢
  • 2012-03-14
  • 2016-05-20
  • 2019-03-03
  • 2011-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-12
  • 1970-01-01
相关资源
最近更新 更多