我有一个MVP应用程序,它有以下几层:
在演示层和服务层之间,我使用DTO。
假设我使用L2S或EF从数据库中获取数据。我得到一个可以是int或datetime等的dataype。但是表示层需要它作为字符串或某种格式。这究竟发生在哪里?
服务是否这样做? DTO?主持人?其他地方?
答案 0 :(得分:0)
转换有两种类型。
将数据库字段转换为有用的数据模型对象(可能在您的业务层中),并将模型数据转换为某种表示对象。
前者会将数据库中的BIT
字段转换为模型中的Boolean
。
后者会在演示文稿中将DateTime
转换为可见字符串。
这两个转换发生在数据提取点和表示渲染点。
答案 1 :(得分:0)
但表示层需要它 字符串或某种格式。
如果表示层(UI)需要以某种格式(否则它无法互操作),那么你别无选择,只能转换它 - 但转换很可能是UI具体;在这种情况下,最好的选择(灵活性/关注点分离)是构建一个UI特定的适配器/代理/外观(进行转换),它位于UI和获取数据之间。
这适用于您可以控制整个系统的场景 - 除了UI。
我在你的问题中读到的一个可能的微妙之处并不是UI要求它采用特定的格式,而是我们应该以特定的格式“强烈地喜欢”它;在这种情况下,您将构建适配器/代理到UI中。
这适用于您控制UI但不控制应用程序其余部分的情况。在你的场景中听起来并非如此 - 但值得一提。