问题标签 [domain-object]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2884 浏览

php - DDD,PHP - 在哪里执行验证?

我最近开始玩 DDD。今天我在我的应用程序中放置验证逻辑时遇到了问题。我不确定我应该选择哪一层。我在互联网上搜索,找不到解决我问题的统一解决方案。

让我们考虑以下示例。用户实体由值对象表示,例如 id (UUID)、年龄和电子邮件地址。

非业务逻辑相关的验证由 ValueObjects 执行。没关系。我在放置业务逻辑规则验证时遇到问题。

假设我们需要让 18 岁以上的用户拥有自己的电子邮件地址怎么办?我们必须检查今天的年龄,如果不正常则抛出异常。

我应该把它放在哪里?

  • 实体 - 在构造函数中创建用户实体时检查它?
  • 命令 - 在执行插入/更新/任何命令时检查它?我在我的项目中使用战术家,所以它应该是一份工作
    • 命令
    • 命令处理程序

在哪里放置负责检查存储库数据的验证器?

就像电子邮件的唯一性。我阅读了规范模式。如果我直接在命令处理程序中使用它可以吗?

最后但并非最不重要。

如何将其与 UI 验证集成?

我上面描述的所有内容都是关于域级别的验证。但是让我们考虑从 REST 服务器处理程序执行命令。我的 REST API 客户端希望我在输入数据错误的情况下返回有关问题的完整信息。我想返回带有错误描述的字段列表。实际上,我可以将所有命令准备都包装在 try 块中并侦听 Validation 类型的异常,但主要问题是它会为我提供有关单个错误的信息,直到第一个异常。这是否意味着我必须在控制器级别复制我的验证逻辑(即使用 zend-inputfilter - 我正在使用 ZF2/3)?听起来很不协调...

先感谢您。

0 投票
7 回答
1369 浏览

c# - 在 ASP.NET MVC 解决方案中,从我的域对象中重构表示代码的最佳方法是什么?

我刚刚接手了一个 ASP.NET MVC 项目,需要进行一些重构,但我想获得一些关于最佳实践的想法/建议。

该站点有一个 SQL Server 后端,这里是对解决方案中项目的回顾:

  • DomainObjects(每个数据库表一个类)
  • DomainORM(将代码从对象映射到数据库)
  • 模型(业务逻辑)
  • MVC(常规 ASP.NET MVC Web 设置)----控制器 ---- ViewModels ---- Views ---- Scripts

我看到的第一个“问题”是,虽然域对象类几乎是POCO,在计算字段周围有一些额外的“获取”属性,但域对象中有一些表示代码。例如,在 DomainObjects 项目中,有一个Person对象,我在该类上看到了这个属性:

所以显然在域对象中包含 HTML 生成的内容似乎是错误的。

重构方法

  1. 我的第一直觉是将其移至 MVC 项目中的 ViewModel 类,但我看到有很多视图会命中此代码,因此我不想在每个视图模型中重复代码。

  2. 第二个想法是创建 PersonH​​TML 类,它可以是:

    2a。在构造函数中接收 Person 的包装器或

    2b。从 Person 继承的类,然后具有所有这些 HTML 呈现方法。

    视图模型会将任何 Person 对象转换为 PersonH​​TML 对象并将其用于所有呈现代码。

我只是想看看:

  1. 如果这里有最佳实践,因为这似乎是一个常见的问题/模式

  2. 考虑到这种当前状态有多糟糕,因为除了感觉错误之外,它并没有真正导致理解代码或创建任何不良依赖关系的任何重大问题。任何有助于描述为什么让代码处于这种状态的论据从真正的实际意义上是不好的(相对于理论上的关注点分离论点)都会有所帮助,并且团队中存在是否值得改变的争论。

0 投票
1 回答
300 浏览

mongodb - 具有共享域对象的 Spring Boot MongoDB

我有 3 个服务(3 个不同的项目,例如 ClientService、AggregationService、DataService)共享相同的域对象,其中只有一个(DataService)连接到 MongoDB 并将数据发送回其他 2 个服务。所有这些服务都是基于 Spring Boot

当我在各自的项目中保留域对象的单独 java 文件时,它一切正常,因为 ClientService 和 AggregationService 中的域对象没有 mongodb 注释,例如 @Document、@Field。

但是当我将域对象保存在一个公共模块中以便我不必维护 3 个副本时,ClientService 和 AggregationService 在启动期间开始抛出异常。尽管这些服务确实启动并正确返回了响应,但是当这些服务启动时也会出现异常。下面是域对象:

例外:

我找到了导致问题的确切位置。该问题是由我添加到我打算保留所有域对象的公共库项目中的 maven 依赖项引起的。

如果我删除此依赖项,则异常不会出现。保持跨项目共享的域对象的方法应该是什么?

0 投票
1 回答
340 浏览

database - 在 grails 中使用常量设计域的最佳方法

我的项目中有很多域类。其中许多具有类型列。例如:User表有userType列,Book表有bookType列。我经常通过g:select调用BookType.list()方法将这些类型传递到 GSP 源中。但问题是如果 GSP 包含很多,g:select那么我必须执行很多冗余查询。

另一个问题是当我创建一个新的域实例时,我必须通过以下方式从数据库中获取这些常量类型

这里我也有同样的问题,我必须执行冗余查询。有没有什么好的设计可以在不执行这些冗余查询的情况下完成所有这些事情?

0 投票
1 回答
31 浏览

javabeans - 为什么映射java bes

我最近遇到了Orika

而且我找不到一个很好的解释为什么我应该使用它。如果我有一个User域对象,为什么不使用它呢?为什么我需要创建具有或多或少相同成员的 UserDTO。

当然,有时我需要隐藏一些字段。但这并不能解释拥有数十个库的必要性。

有人可以向我解释为什么我不应该将域对象从一个架构边界重用到另一个架构边界吗?说边界包括层或微服务接口或任何类似的东西。

0 投票
2 回答
198 浏览

validation - Grails 域:如何访问父域数据?

我有一个父子域结构,我想为验证器访问子域中的父域数据。例如在下面的代码示例中,child1 有一个变量“名称”,出于验证器的目的,我需要 child2 数据。

我怎样才能实现这种情况?

我有这样的域结构:

我试过 this.parent.child2 但发现父母为空。

编辑:
更改:
static belongsTo = [parent:Parent]

还添加在验证器中:
if(obj.parent){ return true } return false

它仍然返回错误。

0 投票
1 回答
149 浏览

grails - 使用注入服务序列化域实例?

我有一个域对象,它跟踪使用注入的 Spring Security 服务创建、删除和修改它的用户,def springSecurityService. 这些对象的实例保存在会话中,并且在生产中,会话被持久化到数据库以进行会话故障转移。会话存储类序列化会话中的Jetty对象,但如果会话包含不可序列化的对象,则抛出异常springSecurityService。有没有办法将springSecurityService实例标记为已忽略, transient可能是,但仍然可以访问service?我试过了。

没有帮助。

0 投票
2 回答
175 浏览

grails - 您在 grails 中执行查询的域对象是否重要

执行查询时使用什么域对象是否重要?例如,我有这两个域对象

如果我想获取所有 A 对象,我可以执行以下操作

但我也可以从不同的域对象调用相同的查询并获得完全相同的结果

这两个语句在性能方面有区别吗?也许在幕后发生的事情有所不同?

对于更多的上下文,我正在编写一个服务,应用程序将在其中动态执行域对象的查询。所以我可以选择一个基础域对象并每次都执行它,或者我可以使用提供给方法的字符串来创建域对象的实例。

谢谢

0 投票
0 回答
23 浏览

java - 从 JAXB 对象生成 DO

有没有办法从 JAXB 生成的对象生成 Java 域对象?

我有以下文件,需要从中生成域对象。

实际上,我从这段代码中删除了一些行,需要在我的文本中添加一些水,以便在那里发布我的问题

0 投票
2 回答
624 浏览

javafx - Javafx:TreeView 的域对象

我的应用程序中有三个域对象,如下所示:

这三个都依赖于工作流->工作表->任务。我的目标是构建 TreeView 使其如下所示:

到目前为止,我已经构建了一个示例,该示例构建的内容比我期望的要少,但它根本不是通用的和“自动化的”。

有人可以建议我如何递归地访问我的域对象并像我的示例中那样构建 TreeView 吗?