小编Ken*_*son的帖子

DDD何时应该创建域对象和持久性对象而不是使用持久性对象作为域对象?

当我对领域驱动设计的理解工作时,我发现我有一个似乎有效的规则,虽然我想看看它是否过度,并且还希望看到相同情况的其他观点.

我的问题是:"域模型和持久性模型应该何时包含在单独的对象中?" 我现在选择的语言是Java,我正在使用Spring Data的存储库模型.

我看到了我的问题的三个主要答案.

  1. 始终使用持久性对象中的单独域对象.
  2. 仅在将域方法(行为)放在持久性对象上时才使用单独的域对象.
  3. 在所有情况下都使用持久性对象作为域对象.

为了询问有关DDD的问题,我发现我必须使用示例有界上下文,因为我还不太了解DDD以更抽象的方式提问.

这是我的说明性有限背景:说我有一个法律编纂系统,其中包含以下业务规则:

  1. 书中的每项法律都必须进行分类.
  2. 每个法律都有一个标识符,包含两部分,编号编号前缀和编码共同分配后缀.(例如:100-0100,599-2030).
  3. 有多个法律管辖区正在使用法律编码系统,他们应该能够自己制作共同编号,但编码前缀是全球性的,并且在所有司法管辖区内必须相同,以促进一般可比性.
  4. 编码数字前缀分为广泛的编码类别.编纂类别具有数字范围,例如100-199,200-299,700-799等.

为了将这个有界的上下文表达为持久性模型,我有以下内容:

table: codification
fields: chart_code, prefix, coassign, codification_category

table: codification_chart
fields: chart_code, jurisdiction_description

table: codification_category
fields: category, low_category_number, high_category_number, description

table: global_codification
fields: prefix, coassign, codification_category
Run Code Online (Sandbox Code Playgroud)

我知道,我应该首先从域模型开始.我有一个持久性模型和一个域模型

在我的域模型中,我有三个域对象

public Codification {
    private String prefix, coassign;
    codificationCategory codificationCaegory; // an enum type
    public Codification(...) { // set private vars }
    // getters for private variables
}

public CodificationChart {
    private List<Codification> chartCodifications = new ArrayList<>();
    private String …
Run Code Online (Sandbox Code Playgroud)

java spring domain-driven-design jpa ddd-repositories

7
推荐指数
1
解决办法
1498
查看次数

Zuul Proxy CORS头包含多个值,头重复两次 - Java Spring Boot CORS过滤器配置

为什么我会将每个CORS标头加倍?我正在使用Zuul代理向通过API网关代理的服务发出请求.

我的弹簧安全过滤顺序必须有错误的配置.

当我访问需要身份验证的路由时,我收到如下错误:

请求通过API网关错误进行服务

XMLHttpRequest cannot load https://myservice.mydomain.com:8095/service/v1/account/txHistory?acctId=0.  
The 'Access-Control-Allow-Origin' header contains multiple values '*, *', but only one is allowed. 
Origin 'http://localhost:9000' is therefore not allowed access.
Run Code Online (Sandbox Code Playgroud)

Chrome网络日志

我检查了Chrome devtools中的响应,确定CORS标头重复了两次: CORS标题重复

所以这看起来像我的CORS过滤器每次回复被调用两次.我不知道为什么会发生这种情况.可能是我的过滤器在ChannelProcessingFilter之前添加.

API网关CORS过滤器代码:

public class SimpleCORSFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {}

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse res = (HttpServletResponse) response;
        res.setHeader("Access-Control-Allow-Origin", "*");
        res.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT");
        res.setHeader("Access-Control-Max-Age", "3600");
        res.setHeader("Access-Control-Allow-Headers", "Authorization, Content-Type, Accept, x-requested-with, …
Run Code Online (Sandbox Code Playgroud)

spring-security http-headers cors spring-boot netflix-zuul

6
推荐指数
2
解决办法
7941
查看次数

如何使用Gradle with Spring Boot获取Gosling Release Train of Spring数据?

如何将最新的Gosling版本系列列入我的Gradle构建文件?

我曾经在大多数依赖项中使用1.1.9.RELEASE组.现在我需要修复这里RepositoryRestMvcConfiguration提到的问题并且这样做我正在尝试升级到spring Data的最新版本,它根据我链接的github问题修复了bug.

当我添加Gosling版本系列依赖项时,我还删除了spring-data-jpa的spring启动程序和spring-data-rest,认为我可能存在依赖冲突.这样做会拉入新的jar文件,但现在我的cannot find symbol所有javax.persistence注释都出错了.

我可以使用带有弹簧启动启动器的Gosling版本系列,还是我必须弄清楚如何手动拉入所有弹簧启动依赖关系才能使用Gosling?

我在Mac OS X Yosemite上使用Gradle 2.3.10.

新规范

buildscript {
  ext {
    springBootVersion = '1.3.0.M3'
  }
  repositories {
    jcenter()
    mavenCentral()
    //maven { url "https://repo.spring.io/snapshot" }
    maven { url "https://repo.spring.io/milestone" }
  }
  dependencies {
    classpath "io.spring.gradle:dependency-management-plugin:0.5.0.RELEASE"
    classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
  }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'spring-boot'
apply plugin: "io.spring.dependency-management"

ext {
  springVersion = '4.1.6.RELEASE'
  springDataVersion = 'Gosling-RELEASE'
}

dependencyManagement {
  imports {
    mavenBom "org.springframework:spring-framework-bom:${springVersion}" …
Run Code Online (Sandbox Code Playgroud)

spring gradle spring-data spring-boot

5
推荐指数
1
解决办法
926
查看次数

参数调用内的花括号.>>这是什么意思?| 春季3和GWT

当代码段"new TextColumn(){...},"MyObjectId");" 然后执行对花括号中最外面的代码代表什么?它是否代表TextColumn对象的匿名内部类实例?它是否代表TextColumn对象的定义?

table.addColumn(new TextColumn<MyObjectProxy>() {
    Renderer<Integer> renderer = new AbstractRenderer<Integer>() {
        public String render(Integer obj) {
            return obj == null ? "" : String.valueOf(obj);
        }
    };
    @Override
    public String getValue(MyObjectProxy object) {
        return renderer.render(object.getMyObjectId());
    }
}, "MyObjectId");
Run Code Online (Sandbox Code Playgroud)

如果您想知道TextColumn来自com.google.gwt.user.cellview.client.TextColumn包.

java gwt spring

4
推荐指数
1
解决办法
605
查看次数

是Hibernate,PostgreSQL还是Spring Boot:尝试衡量JDBC REF_CURSOR支持级别时出现意外错误:null

在我的项目中使用PostgreSQL JDBC驱动程序时,我得到一个奇怪的错误,指出"尝试测量JDBC REF_CURSOR支持级别时出现意外错误:null"

它导致我的应用程序在启动时持续八十到三百秒之间.启动后一切正常.我使用以下驱动程序版本:

(Gradle Dependency style)'org.postgresql:postgresql:9.3-1102-jdbc41'

我的应用程序是一个Spring Boot应用程序,在启动该应用程序时会发生挂起.

打开Hibernate日志记录后,我看到了错误.完整日志位于以下粘贴中.

http://pastebin.com/CAjSyQw9

在它粘贴到该粘贴中的日志的最后一行之后,应用程序挂起八十到三百秒,通常平均约100秒.该应用程序仍然正常启动并按预期工作.

这种错误是否与JDBC驱动程序有关?

有关于这一主题的类似SO问题在这里.

编辑1:

看起来我的粘贴垃圾桶的第69和70行发生了一些非常奇怪的事情.看起来我的org.postgresql.Dialect的指定方言正在改为某些MySQL的东西.

[org.hibernate.dialect.Dialect] : [MySQL5] -> [org.hibernate.dialect.MySQL5Dialect] (replacing [org.hibernate.dialect.MySQL5Dialect])
2014-10-16 08:05:50.561 DEBUG 36916 --- [ost-startStop-1] o.h.b.r.s.internal.StrategySelectorImpl  : Registering named strategy selector [org.hibernate.dialect.Dialect] : [MySQL5InnoDB] -> [org.hibernate.dialect.MySQL5InnoDBDialect] (replacing [org.hibernate.dialect.MySQL5InnoDBDialect])
Run Code Online (Sandbox Code Playgroud)

postgresql hibernate jdbc spring-boot

4
推荐指数
1
解决办法
3994
查看次数

尖括号是什么意思作为返回类型的一部分?<T> T

对于此方法,该<T>部分对此方法的返回类型的一部分意味着什么?是我指定.class文件的地方吗?它甚至是返回类型定义的一部分吗?它有什么用途?它是定义第二个参数使用的类类型Class<T> requiredType还是不用于参数定义?

public <T> T queryForObject(String sql, Class<T> requiredType, Map<String, ?> args) throws DataAccessException {
    return getNamedParameterJdbcOperations().queryForObject(sql, args, requiredType);
}
Run Code Online (Sandbox Code Playgroud)

java generics

1
推荐指数
1
解决办法
903
查看次数