2009-04-08 61 views
1

我正在寻找一些有关当前设计的反馈。应用架构反馈

这是它目前的样子

  1. Web应用程序(UI)参考BLL层和BusinessEntities层
  2. BusinessEntites层 - 包含接口和类(与特性内部验证)
  3. BLL(引用了BusinessEntities和DAL层) - 大多数管理者都使用Create()Save()Delete()等方法来管理每个业务对象。
  4. DAL(引用BusinessEntities层) - 具有创建/添加/更新业务实体对象的DB命令。

我不太确定我用于图层的命名约定,所以如果有人有任何更好的建议,我会很乐意采用它们。

而且我不喜欢DAL引用BusinessEntities层的想法,但我要去怎么回事返回的对象,而不是数据集/数据表?

感谢您的任何反馈意见。

回答

1

对于您需要从DAL引用业务层的问题,我会同意这可能不是最优 - 低层不应该知道高于他们的层,它会降低可重用性并增加额外的/潜在的循环依赖。

你有没有考虑过让您的企业实体“补投案自首”,并使用DAL类,而不是像个工厂为他们DAL做自己的持久性操作(如当前的设计)?这样,您的DAL将是数据库的更直接表示,并且业务实体将包含填充和适当保持自己所需的(业务)逻辑。

另外,您指定的“BLL”图层在我看来并不包含业务逻辑;它看起来更像是实体的持久性服务层。

所以你提出什么样的变化可能是:

  1. 网络/ UI,引用业务实体
  2. BusinessEntities,包含业务逻辑接口和类。参考DataServices图层
  3. DataServices,包含加载,查找和保留数据的类。可以提供包含可由业务实体生成,使用和处理的数据(数据传输对象)的“通用”结构。参考文献DAL。
  4. DAL,它只是提供映射到表的类。

根据您的要求,我会考虑将您的BusinessEntities和DataServices(原始设计中的BLL)合并为一个层;我可以想到将它们分开的唯一原因是,如果您正在做类似Silverlight的事情,而您需要在客户端业务实体上进行异步数据操作。

当然,所有这一切都与你特定的系统要求一个不完整的知识 - 你需要设计什么是最适合您的具体应用。祝你好运!

+0

谢谢盖伊。 我仍然很难理解DAL如何在不知道任何事情的情况下将类传回DataServices层。我显然对此很新,所以也许有一个例子会有所帮助。如果你有时间的话,但如果不是那样的话。 – AlteredConcept 2009-04-08 17:53:16

+0

我看到你问了一个后续问题,但要简单地回答,我会在DAL中定义DTO,如果我需要数据访问服务层,我会将其接口作为消息协定公开为消息协定,独立于DTO 。 DTO只是让你避免传递ADO.NET对象。 – 2009-04-08 21:55:42

+0

所以它看起来像下面这样:DAL具有IAddressDTO,AddressDTO和公共IAddressDTO GetAddress(int id){}。然后DataService层将有一个方法public Address GetAddress(int id){DAL.IAddressDTO iadd = new DAL.AddressDAL.GetAddress(int id); //用DTO创建地址对象} – AlteredConcept 2009-04-09 02:55:41