【问题标题】:Best practices to share common types among layers在层之间共享通用类型的最佳实践
【发布时间】:2015-09-26 20:45:54
【问题描述】:

我有一个业务层,它有一些常见的类型可以将数据传输到服务层(到目前为止还不错),但是,我还有一个表示层需要访问 BL 中的常见类型,我不想要将 BL 类公开给 PL。

我正在考虑在 BL 中创建一个共享库并使其可供所有层访问,或者在 SL 中创建新类并从 BL 类继承它们。

解决此问题的最佳方法是什么。 我的 SL 是一个 WCF 项目,将作为服务托管。 PL 主要是 Web 表单和 MVC。

【问题讨论】:

  • 创建共享库以在其他程序集/库之间共享通用类型?对我来说听起来不错:)
  • 没错,但我最终会得到一个包含许多不相关类和枚举的库,这会是个问题吗?

标签: .net oop architecture


【解决方案1】:

分享业务的堆栈有多远的古老问题 对象。

您希望拥有一个服务层,但又不想一遍又一遍地映射对象 -> 这表明了多种情况:

  1. 您可能会看到所有这些对象都将是 1:1(因此提出了问题)。如果这是真的,那么您正在构建一个非常简单的应用程序,您可以通过根本没有服务层或将业务对象一直共享到 UI 来避免这种情况(迄今为止的最高耦合,但可以工作如果您同时控制客户端和服务器端,应用程序非常仅限 CRUD,并且只有一个客户端应用程序)
  2. 如果它更复杂,尤其是对于多个客户端,请将服务层对象与业务对象完全分开(并且不要继承它们,如果您这样做,那么您也可以简单地公开业务对象 - 几乎没有任何区别)。如果 UI 足够简单,您可以“使用”服务层返回的对象。否则,将演示对象也拆分为自己的对象(视图模型、演示模型或任何其他模式)。

对象的三个“层”听起来比实际复杂得多,许多工具可以帮助解决这个问题(例如 AutoMapper),但通常复杂性来自于应用程序本质上很简单但仍然有很多这样的层;否则你会清楚地看到好处。

顺便说一句,我把这个问题简化了很多,整个讨论都是关于“共享对象”。实际上,还有许多其他的事情可以发挥作用,并简化事情或完全改变上下文(例如 OData 服务,或在客户端使用动态类型语言等)

【讨论】:

  • 感谢您的精彩解释,我想我将使用共享 dll,因为存在 1:1 对象映射并且我们控制客户端和服务器。
  • 请记住项目的现实中长期愿景
猜你喜欢
  • 2014-01-21
  • 1970-01-01
  • 2022-01-08
  • 2016-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-07
相关资源
最近更新 更多