-1

嗨,我正在为女巫重构应用程序的过程中,由于编码和架构设计不佳,我的任务是重构应用程序。幸运的是,由于该项目是几个月前开始的,因此要做的工作并不多。

在与同事讨论后,我决定将应用程序分成三层(DataAcces、业务逻辑和 GUI)。

我已经重组了整个解决方案,将 Entity Framework 、 Automapper 和 Unity 混合在一起。

在与我的项目经理讨论后,我了解到在某些时候可能需要用 NHibernate 和 Ninject 替换 Entity Framework 和 Unity,因为客户对这些框架的团队知识。

做出此决定需要一些时间,并且可能需要其他人来做。

我决定围绕 Entity Framework 、 Automapper 和 Unity 创建包装器,并将它们放在一个单独的项目中,如果在应用程序生命周期的某个时刻将决定更改它们。

就目前而言,我不确定我的应用程序中的层是否属于该项目,因为它包含所有层所需的代码。例如:

-实体框架-DatAccess

-Automapper - 服务层

-Unity - GUI 层、服务层、DataAcces 层

因此,在我的应用程序的所有层中都将存在对该项目的引用。

我不确定这是否有利于应用程序的整体架构。到目前为止,我对 N 层架构的了解是,您必须在各层之间进行明确的分离。

有没有更好的选择,我错过了,或者以这种方式进行是正确的?

4

1 回答 1

1

您应该添加一个 DataContracts 项目。

所以引用将是这样的:

  • 数据访问层
    • 实体框架 - 注意:这不应该公开,DAL 应该包装它
    • 数据合同
  • 自动映射器
    • 数据合同
  • 图形用户界面层
    • 数据合同
  • 服务层
    • 数据合同
  • 统一
    • 数据访问层
    • 自动映射器
    • 数据合同
    • 图形用户界面层
    • 服务层

您的层应该具有在 DataContracts 项目中定义的接口。例如,在您的服务层中,您将不依赖于 DataAccesController,而是依赖于 IDataAccesController。您可以使用统一层将所有内容连接在一起,因为这就是统一的用途。

不建议使用可互换的 IoC 框架。

如果客户端决定他们宁愿使用 nhibernate 而不是实体框架,他们只需要修改 DAL

当然,我不知道您当前的实现,但这是我通常设置它的方式。

于 2013-07-20T15:20:34.433 回答