今天,大多数方法都使用面向模型的方法。
它可以是域驱动的或逆向工程的,一个共同点是它们从模型的静态定义开始。
对于域驱动,它是开发语言本身发布的域。
对于逆向工程,它从静态模型结构定义(例如xsd,wsdl,数据库架构)开始。
语句驱动的开发专注于开发人员可以在某些模型上运行的动作,而不是模型本身。
示例:一条select语句获取具有group-administrator-role用户可以管理的所有组成员。
在这里,该语句可以具体化为以sql为实现的搜索查询。
对于开发人员而言,重要的是查询及其I / O并不是真正的底层模型,而是装饰技术。
为什么以陈述驱动发展
几篇文章和一些限制使我认为,声明驱动的方法可以为开发人员提供灵活,快速的替代方法。
通常,在定义了诸如ORM之类的抽象模型之后,用户必须编写其UC语句。
这意味着仍然需要执行第二步。
该模型有时/通常是过大的。
作为开发人员,您无需在提高生产率之前就了解整个模型的复杂性。
标准限制
本机DSL
有一种趋势表明,SQL是您唯一需要的DSL。
为什么要用限制其功能的其他技术抽象包装它?
再见域对象
…欢迎DTO。
I / O本质上是DTO(为什么它们应该是持久层的确切反映?)。
这种情况只是一个特定的例外。
此异常被多个应用程序/框架广泛使用(可重用性强但有局限性)。
备注:本文不涉及“持久辩论” DO与DTO。
SDD只是带来了一种新方法,该方法不排除但补充了DDD / Rev-Eng。
具体来说
MinuteProject版本0.8.1+(2012年5月中旬)将提供声明驱动开发工具。
- 用户将只关注一条SQL语句。
- 输出将通过执行来推断。
- 输入将易于配置。
例
这是一个简单的配置。
语句模型是新节点。
<model>
...
<statement-model>
<queries>
<query name="get address street">
<query-body><value><![CDATA[select * from address where addressid > ?]]></value></query-body>
<query-params>
<query-param name="identifier_Address" is-mandatory="false" type="INT" sample="1"></query-param>
</query-params>
</query>
</queries>
</statement-model>
</model>
此配置应足以获取:
- 输入豆
- 输出豆
- 输出列表bean
- REST CXF的所有技术装饰:
- 具有REST路径的资源bean
- 弹簧配置
- 本地DAO
演示将在Minuteproject的下一版本(0.8.1)中发布。
与REST集成几乎是语句驱动的:基本上,您只需要知道URL及其I / O。
结论
- 使用SDD时,您可以专注于语句和I / O。
- Minuteproject简化了其余部分(技术包装)。
翻译自: https://www.javacodegeeks.com/2012/05/statement-driven-development.html