java - 如果我从“清洁架构”一书中实现架构,谁必须使用包修饰符创建服务
问题描述
我读了鲍勃叔叔的书——“清洁建筑”。西蒙布朗写了一章。他修改了几种类型的架构。他提出将实现封装在包中。
如果我把包带回来并标记(通过图形淡化)那些可以使访问修饰符更具限制性的类型,那么画面会变得非常有趣(图 34.8)
我用spring DI实现了一种方法:
com.my.service
public interface OrderService {
List<Order> getOrders();
}
和实施:
com.my.service.impl
@Service
class OrderServiceImpl implements OrderService {
//...
}
它工作正常,因为 Spring 找到OrderServiceImpl
标记的@Service
注释。OrderServiceImpl
被封装为(图 34.8.)
但是如果没有 Spring 注释配置,我怎么能重复这个呢?例如,如果我使用 Spring java 配置,我应该像这样创建一个 bean:
@Configuration
public class AppConfig {
@Bean
OrderService orderService(){
return new OrderServiceImpl();
}
}
但是OrderServiceImpl
有一个包修饰符。
如果我不使用 Spring,我应该怎么做才能重复这种方法?
解决方案
我会根据不同的包装类型放置配置。
逐层打包
我会创造
WebConfig
在为 web 层创建 bean 的 com.mycompany.myapp.web` 包中ServiceConfig
在com.mycompany.myapp.service
为服务层创建 bean 的包中DataConfig
在com.mycompany.myapp.data
为数据层创建 bean 的包中
按功能打包
我会创造
OrdersConfig
在com.mycompany.myapp.orders
为订单功能创建 bean 的包中
端口和适配器
我会创造
WebPortsConfig
在com.mycompany.myapp.web
创建 web bean 的包中。OrderConfig
在com.mycompany.myapp.domain
创建端口和适配器体系结构的域对象的包中。DatabaseAdapersConfig
在com.mycompany.myapp.database
其中创建数据库适配器 bean。
按组件打包
我会创造
WebConfig
在com.mycompany.myapp.web
为 Web 内容创建所有 bean 的包中。OrdersConfig
在com.mycompany.myapp.orders
为订单组件创建所有 bean 的包中。
部署单位
如果弹簧配置在同一个包中,则事件不能在同一个部署单元或模块中。
例如,您可以创建 aservice.jar
和 aservice-config.jar
以将纯应用程序与框架内容分开。
service.jar
+- com
+- mycompany
+- myapp
+- service
+- OrderService.class
+- OrderServiceImpl.class
service-config.jar
+- com
+- mycompany
+- myapp
+- service
+- ServiceConfig.class
然后,您只需将两个 jar 放在类路径中,您可以com.mycompany.myapp.service
在主类中添加到组件扫描中,也可以直接引用ServiceConfig
.
推荐阅读
- python - 在 Python 中将数组转换为一系列参数
- html - 在新选项卡中显示 PDF
- ssl - 处理 local_name 中的多个域
- java - 在 android studio 中的活动之间传递数据
- php - 如何在 Laravel 中实现存储库模式
- javascript - 使用表格导航滚动不起作用
- javascript - 多个过滤器在显示一些折旧问题的 AWS 服务器中不起作用,但在 localhost 中运行良好。如何解决这个问题?
- c# - 如何使用 C# 从共享文件夹中获取权限?
- java - 如何在移动应用程序屏幕上显示数据?
- python - 如何仅提取时代细节并在熊猫数据框中保留其他内容?