【问题标题】:Advice on nhibernate project layout, want to put nhibernate related code in own project关于nhibernate项目布局的建议,想把nhibernate相关代码放到自己的项目中
【发布时间】:2011-09-11 19:57:48
【问题描述】:

我正在构建一个 asp.net mvc 应用程序,到目前为止我的解决方案中的项目是:

Solution.PROJECT1
PROJECT1.Web
PROJECT1  
PROJECT1.Tests
PROJECT1.Data
PROJECT1.Data.Tests

所以 PROJECT1.Data 拥有我所有的 nhibernate 相关代码:实体、映射和存储库。

PROJECT1 将包含我的服务层,并将引用 nhibernate 项目。 然后,Web 将仅引用服务层。

我的问题是,如果我有一些对象需要同时放入 PROJECT1.Data 和 PROJECT1 怎么办?

我想创建的 Logger 类就是一个例子。

我想避免递归汇编引用等

我应该用这些类创建另一个项目吗?

【问题讨论】:

    标签: c# nhibernate


    【解决方案1】:

    您好,您的设计看起来不错,我会有一个 .Core 类库项目用于日志记录和其他常用助手,每个项目都可以引用它。

    我也会有一个单独的 .Interfaces 和 .Entities 对项目,经常发生这种情况,您希望 UI 仅通过其接口了解实体,因此 ui 不需要引用实体,但您的服务层需要。

    我会将您可能需要的自定义异常类放在接口或公共或实体中。 common 可能是最好的,但它低于其他两个接口,因此取决于您是否已经需要其中一个接口。

    【讨论】:

    • 那么您是否建议将该项目命名为接口和其他实体?以前没见过这个!
    • 是的,如果您设法将所有内容分开,您可以再拥有 3 个项目:通用、接口和实体。我在很多项目中都使用了这种方法,效果很好。
    • 所以也许我应该给它们添加前缀:Domain.Interfaces, Domain.Entities
    【解决方案2】:

    除了@Davide所说的:

    我会考虑将实体提取到他们自己的项目中,这不会引用数据或 nHibernate。
    这样您就可以确保您的域模型不依赖于数据表示。

    另外,我认为 UI 层最好不要与域实体交互,而是与 DTO(或表示对象)交互。
    这将进一步减少业务逻辑和 UI 逻辑之间的依赖关系,并且还可以让您更轻松地只向客户端发送它需要的东西(例如,User 实体可能包含诸如PasswordHash、@ 987654323@, LastUpdated。但您只想显示用户名和上次登录日期。如果您使用 DTO 创建一个只包含您需要的内容并让您的服务层返回那个.)

    【讨论】:

      猜你喜欢
      • 2014-05-07
      • 1970-01-01
      • 2019-10-28
      • 1970-01-01
      • 2011-03-02
      • 2012-09-29
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      相关资源
      最近更新 更多