gpt4 book ai didi

design-patterns - 软件架构问题。 BL 根据类型创建不同的 DTO。有更好的吗?

转载 作者:行者123 更新时间:2023-12-01 13:58:57 24 4
gpt4 key购买 nike

我有一个具有三层的应用程序:1.数据层:暴露Entity Framework实体2.业务逻辑层:查询EF模型,获取实体并应暴露DTO(数据传输对象)3. UI层:查询BL,获取DTO并查看。

现在我遇到一个问题。我的应用程序的不同部分需要相同的 DTO,但字段略有不同。为简单起见,假设我的 BL 类之一公开了一个名为 Person 的 DTO,该 DTO 需要一次包含姓名和姓名,而在其他地方则需要包含姓名和出生日期。

我想听听您对我的简单解决方案的看法。我认为我的 UI 必须与 BL 就“DTO 契约(Contract)”达成一致,以便两层在类上达成一致。在我的例子中,我会:

a) 创建一个抽象 Person 类。这个类没有任何方法或字段b) 在 BL 中创建一个名为 GetPerson 的方法,该方法接受 Person 类作为参数c) 定义两个或多个派生自 Person 的类(假设 PersonName 和 PersonDOB)d) 我的 UI 调用 GetPerson 传入所需的类型(如 GetPerson(typeof(PersonName)))e) BL填写Person类

你对此有何看法?还有更好的解决办法吗?我认为这不太好,我想到没有什么比这更好的了。

非常感谢。马可

最佳答案

我的 MVC2 应用程序中有类似的架构。我做了什么:

  1. BL 返回具有 Name、Surname 和 DoB 的 Person DTO(所有这些属性都是 Person 的一部分)

  2. 我的 View 与模型一起使用,因此我为每个 View 创建特定的模型。因此,我会有 2 人模型,即。一个包含姓名,另一个包含姓名和出生日期。

DTO 和模型之间的转换是由一组我称为适配器的类完成的。为了简化代码,我使用 Automapper 。这是一段出色的代码,它将考虑命名约定和显式配置,将属性从 DTO 复制到模型。请查看 is,因为您可能希望使用它从 EF 类填充 DTO。

总结一下,我有一个一致的 BL,没有任何异味(这种“给我一个这种类型的子类”业务对我来说有点异味),并且我的观点是使用仅包含相关数据的强类型模型.

关于design-patterns - 软件架构问题。 BL 根据类型创建不同的 DTO。有更好的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4073879/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com