该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2006-08-14
yimlin 写道 是不是可以从domain object的角度
考虑限制组合的范围在如下: 1. where 2. order by 另外还有和domain object无关的 3. 分页 4. top n 这样不考虑select和from,当然也不考虑join了。 这样问题简单了。对于同一domain object其where和order的组合是简单的。 DDD一书中的and,or和not操作是容易支持的。 那么对于那些确实复杂的sql查询怎么办?简单。单独写一个,我的观点是太复杂的东东复用的可能性也不大,日后出现类似的东东可以考虑用OO的继承的方式搞定,CO和OO本来就不是相互排斥的。 不过不考虑join明显是个问题,我估计应用系统中:普通的sql,join的sql以及更复杂的sql语句的比例是4:4:2。只是如果应用specification的话,join处理实在麻烦。 这个DDD到底是什么书啊?晕了。 在domain层次上搞,也许是个有意义的思路。只不过需要具体分析domain logic能否适合co,或者说,这个co搞出来,是真的能完全应对变化的关键性技术,还是只是一个摆设?这方面我觉得我还没有把握。需要一个domain方面的专家并且理解co的人来说话。 在sql上搞组合子,抛开到底多有用不说,至少我知道是可行的。relational algebra就是那么多东西,尽管演绎出来可以千变万化,基本演算就是那么几个,所以非常适合用co。 |
|
返回顶楼 | |
发表时间:2006-08-14
不能光说不做。
这不,刚刚写了jrc的组合子部分,可以生成ast。 还剩下两部分: 1。通过实现ast的visitor接口来针对具体dbms生成sql代码。(这里面应该还是有一些设计的技巧可用,来尽量在不同dbms之间重用代码。) 2。写parser,把ansi sql翻译成ast。我准备用jparsec来写。 两部分都实现了,这个sql组合子就能真正使用了。 布娃娃有没有兴趣合作? |
|
返回顶楼 | |
发表时间:2006-08-14
ajoo 写道 不能光说不做。
这不,刚刚写了jrc的组合子部分,可以生成ast。 还剩下两部分: 1。通过实现ast的visitor接口来针对具体dbms生成sql代码。(这里面应该还是有一些设计的技巧可用,来尽量在不同dbms之间重用代码。) 2。写parser,把ansi sql翻译成ast。我准备用jparsec来写。 两部分都实现了,这个sql组合子就能真正使用了。 布娃娃有没有兴趣合作? 在那个回答问题的帖子里面。 给你3个月的时间,学习一门相对新的技术,你会学什么? nihongye的回答是,jaskell。 跟ajoo偶像学习的机会,求之不得阿。 有了这样的好机会,正好把haskell的语法熟悉一下,那个臭名昭著的monad到现在还没有完全理解。 parser也是,参考jfun的parser,我把fastm parser翻来覆去重构了几次,也达不到那么优雅的程度。这次正好深入学习借鉴。 而且ajoo这么一说,感到sql拼装确实还是个大有可为的领域。 我早就加了ajoo的MSN。不过,很少见到ajoo上线。我再给你发个站内短信,确认一下。 -------------------- 那个model代码的处理,和Relation的代码很类似。 里面也需要出现 top, where, group之类的控制,用来对应query template。所以query template会非常复杂, |
|
返回顶楼 | |
发表时间:2006-08-14
羡慕布娃娃,能和偶像合作。
|
|
返回顶楼 | |
发表时间:2006-08-14
buaawhl 写道 ajoo 写道 不能光说不做。
这不,刚刚写了jrc的组合子部分,可以生成ast。 还剩下两部分: 1。通过实现ast的visitor接口来针对具体dbms生成sql代码。(这里面应该还是有一些设计的技巧可用,来尽量在不同dbms之间重用代码。) 2。写parser,把ansi sql翻译成ast。我准备用jparsec来写。 两部分都实现了,这个sql组合子就能真正使用了。 布娃娃有没有兴趣合作? 在那个回答问题的帖子里面。 给你3个月的时间,学习一门相对新的技术,你会学什么? nihongye的回答是,jaskell。 跟ajoo偶像学习的机会,求之不得阿。 有了这样的好机会,正好把haskell的语法熟悉一下,那个臭名昭著的monad到现在还没有完全理解。 parser也是,参考jfun的parser,我把fastm parser翻来覆去重构了几次,也达不到那么优雅的程度。这次正好深入学习借鉴。 而且ajoo这么一说,感到sql拼装确实还是个大有可为的领域。 我早就加了ajoo的MSN。不过,很少见到ajoo上线。我再给你发个站内短信,确认一下。 -------------------- 那个model代码的处理,和Relation的代码很类似。 里面也需要出现 top, where, group之类的控制,用来对应query template。所以query template会非常复杂, 还缺人否? |
|
返回顶楼 | |
发表时间:2006-08-14
ajoo 写道 yimlin 写道 是不是可以从domain object的角度
考虑限制组合的范围在如下: 1. where 2. order by 另外还有和domain object无关的 3. 分页 4. top n 这样不考虑select和from,当然也不考虑join了。 这样问题简单了。对于同一domain object其where和order的组合是简单的。 DDD一书中的and,or和not操作是容易支持的。 那么对于那些确实复杂的sql查询怎么办?简单。单独写一个,我的观点是太复杂的东东复用的可能性也不大,日后出现类似的东东可以考虑用OO的继承的方式搞定,CO和OO本来就不是相互排斥的。 不过不考虑join明显是个问题,我估计应用系统中:普通的sql,join的sql以及更复杂的sql语句的比例是4:4:2。只是如果应用specification的话,join处理实在麻烦。 这个DDD到底是什么书啊?晕了。 在domain层次上搞,也许是个有意义的思路。只不过需要具体分析domain logic能否适合co,或者说,这个co搞出来,是真的能完全应对变化的关键性技术,还是只是一个摆设?这方面我觉得我还没有把握。需要一个domain方面的专家并且理解co的人来说话。 在sql上搞组合子,抛开到底多有用不说,至少我知道是可行的。relational algebra就是那么多东西,尽管演绎出来可以千变万化,基本演算就是那么几个,所以非常适合用co。 DDD=Domain.Driven.Design |
|
返回顶楼 | |
发表时间:2006-08-15
1.重用sql语句没有意义
2.和直接使用sql语句相比,如此实现显得更为复杂,功能也不如sql语句强大 |
|
返回顶楼 | |
发表时间:2006-08-16
我正在想法弄一个svn host。
然后布娃娃有兴趣搞一个sql parser。 还缺人做sql code generator。就是实现几个visitor,根据不同数据库产生不同的sql。 对了,回楼上的。 1。任何代码重复都是有害的。 2。并不排斥使用sql,只不过在sql的基础上增加组合支持。实际上,query的基本骨架并不推荐用组合子从头组合,而是通过写sql让parser给parse成语法树。所以使用起来不会更复杂。 3。我们这个sql会用"where date between $startdate and $enddate"而不是传统jdbc的语法"where date between ? and ?"。绑定参数不是按照顺序,而是按照名字。 前者现在几乎是很多脚本系统的标准语法,更容易读,也容易使用。 当然,最终sql代码生成的时候,还是会生成?的。 |
|
返回顶楼 | |
发表时间:2006-08-16
ajoo 写道 还缺人做sql code generator。就是实现几个visitor,根据不同数据库产生不同的sql。 我报名,不过我的sql功力一般。 很想和偶像一起体验组合子。 |
|
返回顶楼 | |
发表时间:2006-08-16
引用 在那个回答问题的帖子里面。
给你3个月的时间,学习一门相对新的技术,你会学什么? nihongye的回答是,jaskell。 这都让buaawhl记得,ajoo咱偶像啊,我已经强迫我的一个朋友开始在学jaskell咯。 |
|
返回顶楼 | |