Sculptor 1.5.0发布 ,开源工具
程序员文章站
2022-05-24 22:42:55
...
Sculptor是一个开源的工具,可以适用于领域驱动设计和领域特定语言。
你可以通过文字说明来表达你的设计意图,Sculptor会帮你产生高品质的Java代码和配置。Sculptor关注技术的细节和一些令人厌烦的重复性工作,让你专注于提高更多的业务价值以及更多的乐趣。
Sculptor非常适用于发展中的企业或网络应用程序,可以享受丰富和持续的Domain模型。它的实施基于我们众所周知的框架,如Hibernate 和 Spring。
CRUD GUI的执行有两种形式:
- 基于Spring Webflow 和JSF的网络应用
- 基于Eclipse富客户端品台和Spring的富客户端
通过Eric Evans'实战DDD 中的例子,对Sculptor进行介绍。
我们需要一种新的服务,将Cargo从一个地方移动到另一个地方:
Service BookingService { @TrackingId bookNewCargo(@UnLocode origin, @UnLocode destination); } BasicType TrackingId { String identifier key; } BasicType UnLocode { String unlocode key }
当你为服务手动添加了logic后,Sculptor会为此模型生成一个EJB服务和一个单独的实现。Spring注入依赖和AOP的错误处理也会被产生。
我们需要考虑到一个长期的location对象以及找到次对象的方式:
Service BookingService { inject @CargoRepository @TrackingId bookNewCargo(@UnLocode origin, @UnLocode destination) throws LocationNotFoundException; protected findLocation => LocationRepository.find; } Entity Location { not optimisticLocking scaffold - @UnLocode unLocode key String name not changeable Repository LocationRepository { @Location find(@UnLocode unLocode) throws LocationNotFoundException; protected findByKeys; } }
booking的返回应保存到Cargo的实体中:
Entity Cargo { - @TrackingId trackingId key - @Location origin required - @Location destination required Repository CargoRepository { save; TrackingId nextTrackingId; } }
再次生成后会有两个持久化对象和Hibernate的映射和库。
最后,我们手动添加Java代码完成booking服务:
public TrackingId bookNewCargo(ServiceContext ctx, UnLocode originCode, UnLocode destinationCode) throws LocationNotFoundException { TrackingId trackingId = getCargoRepository().nextTrackingId(); Location origin = findLocation(ctx, originCode); Location destination = findLocation(ctx, destinationCode); Cargo cargo = new Cargo(trackingId, origin, destination); getCargoRepository().save(cargo); return cargo.getTrackingId(); }
在 Sculptor wiki 上,你会找到更多例子和解释。
下一篇: Nutz 1.b.52 发布