在层之间共享通用类型的最佳实践
Best practices to share common types among layers
我有一个业务层,它有一些通用类型来将数据传输到服务层(到目前为止还不错),但是,我还有一个表示层需要访问 BL 中的通用类型,我不知道不想将 BL 类 暴露给 PL。
我正在考虑在 BL 中创建一个共享库并使其可供所有层访问,或者在 SL 中创建新的 类 并从 BL 类 继承它们。
解决这个问题的最佳方法是什么。
我的 SL 是一个 WCF 项目,将作为服务托管。 PL 主要是 Web Forms 和 MVC。
The ancient question of how far up the stack to share the business
objects.
您想拥有一个服务层,但又不想一遍又一遍地映射对象 -> 那么这表明了很多事情:
- 您可能会看到所有这些对象都是 1:1(因此出现问题)。如果这是真的,那么你正在构建一个非常简单的应用程序,你可以通过根本没有服务层,或者让业务对象一直共享到 UI(迄今为止最高耦合)来避免这种情况,但如果您同时控制客户端和服务器端,则可以工作,应用程序非常仅限 CRUD,并且只有一个客户端应用程序)
- 如果它更复杂,尤其是有多个客户端,请将服务层对象与业务对象完全分开(并且不要继承它们,如果这样做,那么您也可以简单地公开业务对象 - 几乎没有任何区别)。如果 UI 足够简单,您可以 "use" 服务层 returns 的对象。否则,将表示对象也拆分为自己的对象(视图模型、表示模型或任何其他模式)。
拥有三个 "layers" 对象听起来比实际情况更复杂,许多工具可以帮助解决这个问题(例如 AutoMapper),但通常当应用程序本质上很简单但仍然有很多这样的层时,复杂性就会出现;否则你会清楚地看到好处。
顺便说一句,我把问题简化了很多,整个谈话都是关于"sharing objects"。实际上还有很多其他的东西可以发挥作用,简化事情或完全改变上下文(例如 OData 服务,或者在客户端上使用动态类型的语言等)
我有一个业务层,它有一些通用类型来将数据传输到服务层(到目前为止还不错),但是,我还有一个表示层需要访问 BL 中的通用类型,我不知道不想将 BL 类 暴露给 PL。
我正在考虑在 BL 中创建一个共享库并使其可供所有层访问,或者在 SL 中创建新的 类 并从 BL 类 继承它们。
解决这个问题的最佳方法是什么。 我的 SL 是一个 WCF 项目,将作为服务托管。 PL 主要是 Web Forms 和 MVC。
The ancient question of how far up the stack to share the business objects.
您想拥有一个服务层,但又不想一遍又一遍地映射对象 -> 那么这表明了很多事情:
- 您可能会看到所有这些对象都是 1:1(因此出现问题)。如果这是真的,那么你正在构建一个非常简单的应用程序,你可以通过根本没有服务层,或者让业务对象一直共享到 UI(迄今为止最高耦合)来避免这种情况,但如果您同时控制客户端和服务器端,则可以工作,应用程序非常仅限 CRUD,并且只有一个客户端应用程序)
- 如果它更复杂,尤其是有多个客户端,请将服务层对象与业务对象完全分开(并且不要继承它们,如果这样做,那么您也可以简单地公开业务对象 - 几乎没有任何区别)。如果 UI 足够简单,您可以 "use" 服务层 returns 的对象。否则,将表示对象也拆分为自己的对象(视图模型、表示模型或任何其他模式)。
拥有三个 "layers" 对象听起来比实际情况更复杂,许多工具可以帮助解决这个问题(例如 AutoMapper),但通常当应用程序本质上很简单但仍然有很多这样的层时,复杂性就会出现;否则你会清楚地看到好处。
顺便说一句,我把问题简化了很多,整个谈话都是关于"sharing objects"。实际上还有很多其他的东西可以发挥作用,简化事情或完全改变上下文(例如 OData 服务,或者在客户端上使用动态类型的语言等)