企业级Spring最佳实践 - 应用程序架构

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)应该被分为不同的层次和类别。 


企业级Spring最佳实践 - 应用程序架构

Bean Layers
  1. Controllers (MVC, 系统领域)
  2. Services (问题领域)
  3. 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)
@Service
@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.

你可能感兴趣的:(最佳实践,原创翻译,企业级Spring,应用程序架构)