欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  资讯频道

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 上,你会找到更多例子和解释。

 

相关标签: 开源 领域模型