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

Sections


应用领域 Application Domains


咱们的应用程序组件分解为两个基本类别:系统和问题领域。
  • 系统领域(System Domain) – 基础设施架构,这个是Spring的强项!
  • 问题领域(Problem Domain) – 业务组件,一般这个是用例驱动的,这种方式是大多数开发者的使用的解决方案。


应用层(Application Layers)


应用程序的组件(beans)应该被分为不一样的层次和类别。 



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 很是有用。建立并使用项目特写的元注解,能够将业务接口从基础架构中抽象出来。 java

自定元注解
?
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 专一于应用中的输入和输出的转换。 spring

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. 安全

相关文章
相关标签/搜索