当我对领域驱动设计的理解工作时,我发现我有一个似乎有效的规则,虽然我想看看它是否过度,并且还希望看到相同情况的其他观点.
我的问题是:"域模型和持久性模型应该何时包含在单独的对象中?" 我现在选择的语言是Java,我正在使用Spring Data的存储库模型.
我看到了我的问题的三个主要答案.
为了询问有关DDD的问题,我发现我必须使用示例有界上下文,因为我还不太了解DDD以更抽象的方式提问.
这是我的说明性有限背景:说我有一个法律编纂系统,其中包含以下业务规则:
为了将这个有界的上下文表达为持久性模型,我有以下内容:
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) 为什么我会将每个CORS标头加倍?我正在使用Zuul代理向通过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 devtools中的响应,确定CORS标头重复了两次: 
所以这看起来像我的CORS过滤器每次回复被调用两次.我不知道为什么会发生这种情况.可能是我的过滤器在ChannelProcessingFilter之前添加.
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) 如何将最新的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) 当代码段"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包.
在我的项目中使用PostgreSQL JDBC驱动程序时,我得到一个奇怪的错误,指出"尝试测量JDBC REF_CURSOR支持级别时出现意外错误:null"
它导致我的应用程序在启动时持续八十到三百秒之间.启动后一切正常.我使用以下驱动程序版本:
(Gradle Dependency style)'org.postgresql:postgresql:9.3-1102-jdbc41'
我的应用程序是一个Spring Boot应用程序,在启动该应用程序时会发生挂起.
打开Hibernate日志记录后,我看到了错误.完整日志位于以下粘贴中.
在它粘贴到该粘贴中的日志的最后一行之后,应用程序挂起八十到三百秒,通常平均约100秒.该应用程序仍然正常启动并按预期工作.
这种错误是否与JDBC驱动程序有关?
有关于这一主题的类似SO问题在这里.
看起来我的粘贴垃圾桶的第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) 对于此方法,该<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 ×3
spring ×3
spring-boot ×3
cors ×1
generics ×1
gradle ×1
gwt ×1
hibernate ×1
http-headers ×1
jdbc ×1
jpa ×1
netflix-zuul ×1
postgresql ×1
spring-data ×1