Sections
- 应用领域(Application Domain)
- 应用层(Application Layers)
- 控制器 Beans
- Service Beans
- Repository Beans
- 数据传输 Beans
- Conversion Beans
- Further Reading
- Social Me
应用领域 Application Domains
我们的应用程序组件分解为两个基本类别:系统和问题领域。
- 系统领域(System Domain) – 基础设施架构,这个是Spring的强项!
- 问题领域(Problem Domain) – 业务组件,通常这个是用例驱动的,这种方式是大多数开发者的使用的解决方案。
应用层(Application Layers)
应用程序的组件(beans)应该被分为不同的层次和类别。
Bean Layers
- Controllers (MVC, 系统领域)
- Services (问题领域)
- Repository (系统领域)
Other Bean Categories
- 数据传输对象(问题领域)
- 系统函数(系统领域)
控制器(Controller Beans)
更多的关于 企业级Spring MVC最佳实践的博文即将发表 - 待定。
业务(Service Beans)
Service Beans 是问题领域组件. 在应用程序中是最重要的部分,同时,也是SOA的组成部分。
- 全部是 POJO
- 总是以接口方式定义
- 不要包含基础设施架构组件的引用
- 不要引入Spring和工具包依赖
- 不要使用基础架构层中的注解
- 总是在公有方法中声明事务(译注:可使用 @Transactional)。
- 在接口包中创建一个名叫 internal 的子包,里面存放 Service 接口的实现类
Spring的 @Service 和 @Transactional 注解对 Service 非常有用。创建并使用项目特写的元注解,可以将业务接口从基础架构中抽象出来。
自定元注解
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
packagecom.gordondickens.service.annotation;
importorg.springframework.stereotype.Service;
importorg.springframework.transaction.annotation.Transactional;
importjava.lang.annotation.ElementType;
importjava.lang.annotation.Retention;
importjava.lang.annotation.RetentionPolicy;
importjava.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Transactional
public
@interface AppService {
String value() default"";
}
|
使用元注解
1
2
3
4
5
|
...
@AppService
publicclassMyClass() {
...
}
|
仓储或仓库(Repository Beans)
Repository beans 属于系统领域。更多的关于 Repository 的最佳实践将陆续推出博文 - 待定。
- 实现中不要包含业务逻辑
- 使用Spring和JPA的注解
- 考虑可配置性
数据传输对象(Data Transfer Beans)
数据传输对象 (DTO) 是系统输入和输出的基本对象。DTOs 是作为逻辑集合用于接收和发送的简单的公用 POJO。
- 总是公用的 JavaBean
- 使用 JAXB2 注解
转换(Conversion Beans)
Spring core 组件中提供了一套丰富的转换实现。Spring的转换服务是基于普通的JavaBean 的 PropertyEditor 规范。
Spring中 PropertyEditors 专注于应用中的输入和输出的转换。
org.springframework.beans.PropertyEditorRegistrySupport 类显示的内建了 String <–> object 的支持. 在我们的应用程序中,只需知道怎么使用即可。我们的应用程序使用XML作为配置,并且设置属性值时,Spring使用反射机制确定参数的类型,如果属性类型不是一个字符串,Spring将查找内建的 PropertyEditor实现,将字符串转换为目标属性类型。我们也可以创建自定义的 PropertyEditor实现,并注册该类型。例如:美国社会化安全码和电话号码 Craig Wall’s Spring in Action, 3rd Ed
- 基本类型的包装类型:Long, Integer 等
- 集合类型: List, Property, Set, Map, 等
- 数组
- 工具类型: URL, TimeZone, Locale, 等
Spring3.0 引入了一个 ConversionService 接口,该接口提供我们注册一个将 Object <–> 其他对象的转换服务的能力。 使用转换注册,我们能注册一个自定义的转换类,自动将一个对象转换为另一个对象:MyObject <–> MyOtherObject。具体请参看: Using Spring Customer Type Converter Blog.
来源:oschina
链接:https://my.oschina.net/u/1611/blog/182682