领域逻辑与数据验证

2024-01-03

我正在忙着阅读并享受 Mark Seemann 所著的 .Net 中的依赖注入。

我很难解释确切的上下文,所以如果你熟悉这本书,请只关心这个问题。

我的问题与第 2 章第 49 页中的两个 Product 类有关。其中一个位于域层,一个位于数据访问层。据解释,数据访问层中的 Product 类是由 Linq to Entity 向导创建的。

我正在使用 Linq to SQL,并且我可以使用 Ling to SQL 属性来装饰我的模型类,这样我就不必拥有第二个类。例如。

[Table(Name="Customers")]
public class Customer
{
  [Column(IsPrimaryKey=true)]
  public string CustomerID;
  [Column]
  public string City;
}

然而,我觉得这是混合问题,它实际上将我的域层与 Linq to SQL 数据访问层紧密耦合。你同意这一点吗?

假设我为域和数据访问层创建了两个“客户”类。假设城市是必填字段。保存时需要检查这条规则。这应该在域层还是数据访问层或两者中完成?

谢谢,达林


然而,我觉得这是混合问题,它实际上将我的域层与 Linq to SQL 数据访问层紧密耦合。你同意这一点吗?

是的,会的。实体框架(代码优先)和 nhibernate 都可以使用单独的映射类,这将使您的模型干净,而不依赖于 OR/M。

旁注:域模型不应该有属性的公共设置器(在 DDD 中)。因为它有效地将模型逻辑移至模型外部。

假设我为域和数据访问层创建了两个“客户”类。假设城市是必填字段。保存时需要检查这条规则。这应该在域层还是数据访问层或两者中完成?

数据库实体应该只存在于存储库类中,因此不必验证它。正在保存的域模型应该已经具有正确的状态。

Example:

public class ArticleRepository
{
    public void Save(Article article)
    {
        // Article is already in a correct state
        // (thanks to no public setters)

        var dbEntity = new ArticleEntity();
        Mapper.Map(article, dbEntity);
        _dbContext.Save(dbEntity);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

领域逻辑与数据验证 的相关文章

随机推荐

  • 取消引用指向结构体指针的指针

    gcc 4 7 2 c89 Hello 我试图取消引用指向结构体指针的指针 当我执行以下操作时 我收到此错误消息 LOG INFO CHANNEL ID d channel gt id 编译错误 request for member id
  • 连接黄瓜检查java中的场景失败

    当我正在阅读如何在失败时为黄瓜场景添加清理时 我在互联网上找到了这段代码 After do s if s failed If you are on an iOS Device driver quit sleep time for drive
  • 为什么我不能通过继承 OrderedDict 和 defaultdict 来创建默认的有序字典?

    我第一次尝试将两个词典的功能结合起来collectionsmodule 的作用是创建一个继承它们的类 from collections import OrderedDict defaultdict class DefaultOrderedD
  • 我可以对 WordPress.com 上托管的网站使用 REST API [已关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我在 WordPress com 上托管了一个博客 当我尝试制作一个GET请求检索帖子时我收到 未找到 html 页面 https alex
  • 如何在 React 项目的 axios 拦截器中添加全局加载/旋转效果

    我在 React 项目中使用 axios 进行 API 调用 我想在 axios 拦截器中的 api 调用的请求和响应之间全局添加加载或旋转效果 这是我的拦截器的代码 import Axios from axios Axios interc
  • 没有与 lambda 匹配的函数 std::forward

    考虑以下代码 其灵感来自 Barry 的回答this https stackoverflow com a 42036525 882932问题 Include include
  • 如何以编程方式将视图限制为 ConstraintLayout 中的父视图

    我想使用约束布局以编程方式创建 TextView 或任何其他视图 textView 在 XML 中看起来像这样
  • 空结构背后的目的?

    C 标准库中 auto ptr 的声明 namespace std template
  • IsDate数组公式

    刚刚注意到isDate不适用于arrayformula Case 想要过滤日期的所有值 使用公式 FILTER data ISDATE data 预期结果 8 28 2018 Got N A Question 为什么 其他检查工作在filt
  • Jenkins 管道将所有参数传递给下游作业

    我有一个名为的管道作业buildall看起来像这样 pipeline stages stage job1 build job job1 The buildalljob有25个参数 我想通过所有buildall的参数降至job1 有没有一种简
  • 在 WebView 中显示 URL

    在我的 JsonParsing 中 我从这个 json 中获取了 url 我需要像在 web 视图中一样显示该 Url 链接 我该怎么做 Code在这儿 TextView tv TextView findViewById R id text
  • iOS:MapView 注释未显示图钉

    由于某些奇怪的原因 viewForAnnotation 仅适用于 viewDidLoad 中设置的引脚 这是一个测试引脚 在其他地方加载的引脚在按下时不会被注释 我已经设置了代表 我认为这与mapView调用中的标识符有关 但我不确定如何解
  • Sprite 套件中的 iCarousel

    解释 我正在尝试构建一个类似于 Crossy Road 的角色选择菜单 如您所见here http www therockstargamers com wp content uploads 2015 04 crossy road chara
  • MVC Web API 绑定模型到派生类

    我正在研究如何将模型绑定到 MVC Web API 中的派生类 我遇到的问题是我认为我已经找到了大约 5 种方法 我所拥有的是 型号 gt 模型库 模型A 模型库 模型B 模型库 然后控制器容器该方法 Post ModelBase mode
  • XNA 的自动 XNB 序列化支持哪些类型?

    我已阅读 Shawn Harvgreave 关于自动序列化的博客文章和关于内容管道概述的 MSDN 文章 但我找不到支持的类型列表 引用MSDN 从 XNA Game Studio 3 1 开始 自定义数据的序列化 对于不支持的简单类型 X
  • 如何从 Rails 中的哈希列表中删除嵌套键

    我现在正在尝试几个小时来删除哈希列表的嵌套哈希键 我看到许多解决方案非嵌套哈希 如下所示 sample hash key1 gt value1 key2 gt value2 sample hash except key1 这导致 key2
  • 使用 web api HttpResponseMessage 输出图像

    我正在尝试使用以下代码从 asp net web api 输出图像 但响应正文长度始终为 0 public HttpResponseMessage GetImage HttpResponseMessage response new Http
  • Python对不同维度变量进行曲面拟合得到未知参数?

    我有一个包含 x 和 y 作为自变量的函数 我想将参数拟合到数据和函数并绘制曲面图 我看到如果变量有两个不同的维度 我可以使用np meshgrid x y 那么我如何找到参数a b c呢 我的代码如下所示 import matplotli
  • Python 中的分块矩阵赋值

    从这个mwe a np zeros 5 5 b np zeros 2 2 a np matrix a b np matrix b b 0 0 4 b 1 1 9 b 0 1 7 indice 2 3 1 c a indice indice
  • 领域逻辑与数据验证

    我正在忙着阅读并享受 Mark Seemann 所著的 Net 中的依赖注入 我很难解释确切的上下文 所以如果你熟悉这本书 请只关心这个问题 我的问题与第 2 章第 49 页中的两个 Product 类有关 其中一个位于域层 一个位于数据访