??xml version="1.0" encoding="utf-8" standalone="yes"?>国产一区二区精品久久99,久久99欧美,中文在线а√天堂http://www.aygfsteel.com/wadise/category/6056.htmlzh-cnSat, 03 Mar 2007 04:42:19 GMTSat, 03 Mar 2007 04:42:19 GMT60一讨论DSL的文?/title><link>http://www.aygfsteel.com/wadise/archive/2006/04/19/41987.html</link><dc:creator>wadise</dc:creator><author>wadise</author><pubDate>Wed, 19 Apr 2006 11:16:00 GMT</pubDate><guid>http://www.aygfsteel.com/wadise/archive/2006/04/19/41987.html</guid><wfw:comment>http://www.aygfsteel.com/wadise/comments/41987.html</wfw:comment><comments>http://www.aygfsteel.com/wadise/archive/2006/04/19/41987.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/wadise/comments/commentRss/41987.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/wadise/services/trackbacks/41987.html</trackback:ping><description><![CDATA[江南白衣 10:00:26<br /> JetBrains opens Meta Programming System for Early Access<br /><br /> http://www.theserverside.com/news/thread.tss?thread_id=34619 <br /> 江南白衣 10:00:46<br /> JetBrains那个DSL刉器l于攑և来溜达了 <br /> magicgod 10:00:55<br /> 是不是以ideaZ靠? <br /> 江南白衣 10:01:09<br /> an IDE-like language workbench for creating domain-specific languages (DSLs) and programs. It includes a plugin for IntelliJ IDEA which helps to generate Java code from your DSLs.<br />  <br /> magicgod 10:01:15<br /> dsl跟rules有什么区别? <br /> 江南白衣 10:02:39<br /> Martin Flower最q出来凑热闹,写了一关于Language workbench的blog?非常l合的ȝ了面向语a~程,你看他的好了<br /> http://martinfowler.com/articles/languageWorkbench.html <br /> 江南白衣 10:03:44<br /> 不是?面向对象的封装不能真的一一映射现实世界.<br /> 而面向hc语a习惯的封?从逻辑学上,更能影射人类的思维. <br /> magicgod 10:04:00<br /> 看了一下,真的有点奇?<br /> 江南白衣 10:04:43<br /> 他那blog,一开始D的例子太长太无聊?搞得大家频频赯n吃零?d所.... <br /> buaawhl 10:04:43<br /> LOP. <br /> magicgod 10:05:22<br /> 哈哈Q是?<br /> magicgod 10:05:41<br /> 但我总觉得还是有炚w隐不对劲 <br /> buaawhl 10:06:07<br /> groovy, beanshell, js, python, ruby 不都?LOP吗?<br />  <br /> 江南白衣 10:06:18<br /> 不是?.... <br /> buaawhl 10:06:18<br /> LOP的一个例?<br /> magicgod 10:06:20<br /> q又回到了五六十q代人工和专家系l的方向?<br /><br /><br />  <br /> buaawhl 10:06:43<br /> Lisp允许自定?语法规则 <br /> magicgod 10:06:43<br /> lisp是恐怖的 <br /> buaawhl 10:06:56<br /> 寏V最l的\是 人工 <br /> magicgod 10:07:02<br /> 学autocad的时候,真是要晕M <br /> magicgod 10:07:24<br /> 不见得是自然的,应该有一U类自然语言先出?<br /> buaawhl 10:07:28<br /> autocad用Lisp ? <br /> 江南白衣 10:07:28<br /> Lisp按MF的分c?属于Internal DSL.用自己来表达DSL<br /> 而其他的都属于External DSL,需要{译器 <br /> magicgod 10:07:40<br /> 我看了ilog的语aQ看上去不错 <br /> 江南白衣 10:07:52<br /> MPSq种是用转译器的?不同LISP. <br /> 江南白衣 10:08:50<br /> JetBrains的MPS,优点在帮你制造语a的同?制作q种语言的IDE... <br /> magicgod 10:10:01<br /> 应该是ؓ了让q种语言l用h低实施人员用吧 <br /> 江南白衣 10:11:18<br /> 周末试用一下再说了,q年?Lq告做得?实际没什么用. <br /> buaawhl 10:11:43<br /> MPS is a Java Code generator ?<br />  <br /> magicgod 10:12:16<br /> 是不是这L理想Q创ZU语a适合客户直接使用 <br /> buaawhl 10:12:23<br /> http://www.jetbrains.com/mps/start_mps3.html  look its sample <br /> magicgod 10:12:29<br /> 那么q当于把域逻辑的功能放l用h?<br /> magicgod 10:12:49<br /> q个hello world是有点复杂的Q我觉得他D的例子不?<br /> buaawhl 10:12:52<br /> 客户直接使用 自然语言。比如,汉语 <br /> magicgod 10:13:48<br /> 而且更好规范Q适合计算机来识别 <br /> 江南白衣 10:14:25<br /> 举个例子?SQL属于DSL....你如果不用SQL,也可以用一堆API来进行查?像hibernate的critexx.....<br /> 但SQL明显更易?<br /><br /> so,把代码封装成语言,在某些情况下比封装成OO的lib更好. <br /><br />  <br /> magicgod 10:15:13<br /> 是的Q那如果装成OO的语a呢? <br /> magicgod 10:15:56<br /> 一个用户写好的DSL代码Q承给另一个用户去使用Q岂不是很方?<br /> buaawhl 10:16:57<br /> SQL能够做到的事情很啊。where = if.  <br /> 江南白衣 10:17:03<br /> 可承的语言?q不是我的知识范围内?.. <br /> buaawhl 10:17:08<br /> if( a = 1) b = 3; <br /> buaawhl 10:17:25<br /> select * from A where b = 3 <br /> buaawhl 10:17:43<br /> 隑ֺ差不多啊<br />  <br /> 江南白衣 10:17:57<br /> MF?DSL是不是不符合图灵XXX的语a,不自的,只能成ؓE序的某一斚w,而主体必要General Language(like java)完成. <br /> magicgod 10:18:25<br /> 是的QDSL是要简?<br /> 江南白衣 10:18:40<br /> ?打字太快,<br /> MF?DSL是不符合图灵XXX的语a<br />  <br /> buaawhl 10:18:43<br /> 问题是在于,General Language(like java) 表达 E序的某一斚wQ简单)的时候, 也相当简单。和DSL一L?<br /> magicgod 10:18:53<br /> 目标不是E序员,而是行业用户 <br /> 江南白衣 10:19:08<br /> 而且,单的时候你可以不封装阿. <br /> magicgod 10:19:09<br /> 如果要到DSL的程度就可以视ؓDSL <br /> buaawhl 10:19:11<br /> 那么Q有必要用另一个简单,来定?本来q单的东西吗? <br /> buaawhl 10:19:41<br /> 行业用户Q?-) for example? what they realy need? <br /> 江南白衣 10:19:41<br /> 不是q个意思啊. <br /> buaawhl 10:19:58<br /> 前一D|_看了一?Rule Engine <br /> 江南白衣 10:20:00<br /> ilog的规则语a可以让电信的mm自定义收费规?<br /> magicgod 10:20:26<br /> 是的Q就是要够简单,q只是一个模p概?<br /><br />  <br /> buaawhl 10:21:10<br /> yes. i know iLog. 怎么说呢.那是商业的成?另外也是业务模块的成? <br /> magicgod 10:21:54<br /> 而且实际上DSL应该是面向实际h的Q比如:甉|码是一个非常复杂的~码Q可是仍然有大批的业务h员直接操?<br /> 江南白衣 10:22:01<br /> 其实也不一定直接面对行业用?br /> 只是把某些面向OO的lib ,转ؓ面向语言的封?产生更多的蓝?<br /> 但我觉得q个方向q有太多东西要研I?MPS只是一ơ探?<br /> buaawhl 10:22:24<br /> 谁能l出一?具体?ilog sample ?  MPS可以说是 MDA?br />  <br /> buaawhl 10:22:33<br /> Model Graph -> Code <br /> buaawhl 10:23:16<br /> iLog和JRules是同一个品吗Q?<br />  风之?10:23:19<br /> Ilog是rule->Fuction <br /> magicgod 10:24:27<br /> If    the call destination number is the preferred numberThen     apply the preferred number rate <br /> 江南白衣 10:24:27<br /> MPS的内涵一定不只Model Graph -> Code ,看他的那总领性的文章,不只如此?<br /> 不过可能W一版只做到q样. <br /> magicgod 10:24:41<br /> If    the call destination number is the preferred numberThen     apply the preferred number rate <br /> magicgod 10:24:44<br /> If<br />     the call destination number is the preferred number<br /> Then     <br />     apply the preferred number rate <br /> magicgod 10:24:53<br /> ilog's bal <br /> 庄表?10:25:02<br /> q是ilog的代码? <br /> magicgod 10:25:02<br /> 已经比较接近自然语言?<br /> 庄表?10:25:08<br /> 让我惌v了cobol <br /> buaawhl 10:25:10<br /> yes. i c. 江南白衣(228013) 10:20:00<br /> ilog的规则语a可以让电信的mm自定义收费规?。 ?<br /> 电信的mm写这个? <br /> magicgod 10:25:13<br /> google上抄来的 <br /> buaawhl 10:25:26<br /> 是啊。PascalQ?VB 也是q样 <br /> magicgod 10:25:26<br /> 是的Q有点象Q所以cobol至今q有生命?<br /> magicgod 10:25:43<br /> destination number <br /><br />  <br /> magicgod 10:29:09<br /> q应该就是DSL的好处,用户很快搞懂了SQL的基本方法,以后做报表就单了 <br /> buaawhl 10:29:15<br /> 可以自定义语a规则?<br /> buaawhl 10:29:27<br /> 其实Q就是关键字替换了?<br /> 江南白衣 10:29:40<br /> 不会?ilog的规则语a也是l定IDE?你打个节?会出来一个下拉选择?只能选节假日 <br /> phalanger 10:29:50<br /> 自然语言太自然了不是什么好事,到最后还是要一个语a规则Q发展到最后,其实q是要小mm掌握一门“电脑语a?<br /> magicgod 10:30:10<br /> http://blog.csdn.net/calvinxiu/archive/2005/05/27/382372.aspx <br /> magicgod 10:30:20<br /> 做了一个比?<br /> 江南白衣 10:30:49<br /> 像我们用dtd,xsd限制 xml一? <br /> magicgod 10:31:32<br /> 既然用户需求这么多变,好!q脆开攄你们Q自己写dQ这ȝ好了?<br /> buaawhl 10:31:41<br /> 对,XML表示逻辑Q没有一点优ѝiLog采用的是script方式。好多了?<br /> buaawhl 10:32:18<br /> 不过Q难道iLog要ؓ每一个国家行业定制一U?解释引擎/IDEQ?br />  <br /> 庄表?10:33:03<br /> 看了你的blogQ和我的思\Q有很多可以怺参照之处 <br /> buaawhl 10:33:13<br /> iLog能够行hQ完全靠的是Q行业经验。和 DSL的优?没有关系 <br /> 庄表?10:33:40<br /> 我现在在写的对于OO的分析,是认ؓ它事实上无法准确的描q真实世?<br /> 庄表?10:33:51<br /> 而要描述需求世界,OO又是不?<br /> buaawhl 10:33:54<br /> 假设我也是iLog公司Q我用支?中文变量?VBQ一样可以做到这LE度 <br /> 江南白衣 10:34:14<br /> ilog但如果不靠DSL ,而是一?APIQ想必大打折扣?<br /> buaawhl 10:34:22<br /> 只要把业务模块做好了?<br /> magicgod 10:34:48<br /> 关键在于要让用户来写q个东西最好了 <br /> buaawhl 10:34:53<br /> 是啊QVB ?function 也可以不?( )<br /><br />  <br /> 庄表?10:35:05<br /> 要更好的描述需求世界,应该要将真实l验转换为需求世界中的规范定义,然后需要另外的、特定的、描q需求的语言 <br /> magicgod 10:35:19<br /> 动态语a更好Q这其实是向h工智能的发展 <br /> buaawhl 10:35:26<br /> 用户用iLog从来׃会定?function。从来只是调?function. <br /> 庄表?10:35:27<br /> q样的语aQ究竟是不是要类D然语aQ我却有不同的看?<br /> magicgod 10:35:49<br /> 再下ȝ户就会提要求了,能不能搞懂自q意思啊 <br /> 庄表?10:35:52<br /> 可能cM于model graphq样的图形表CZ更加?<br /> buaawhl 10:35:56<br /> 那么QVB也是一栗我q你一本关键字手册Q而不是API手册。有什么区别? <br /> magicgod 10:36:27<br /> 正是如此QDSL是领域内的一U语a?<br /> magicgod 10:36:51<br /> 定好语法Q函敎ͼ然后用户你去写吧Q最多给你一个IDE可以调试一?<br /> buaawhl 10:37:07<br /> 不是一U。而是多种?-) ilog 一U,jrules一U,drools一U, <br /> 江南白衣 10:37:10<br /> 我还是认a和API之间的差别是巨大的?br /> 而且APiq受很多l承阿,多重l承阿之cȝ~程语言本n的限制?br /><br />  <br /> 庄表?10:37:19<br /> 如果我的思\没错的话Q那么我的那文章,最后会自然的接上DSLq样的语a <br /> 庄表?10:37:27<br />   <br /> magicgod 10:37:33<br /> 是的Q听了阿飞介l的GP实感触比较?<br /> magicgod 10:38:04<br /> 是又回C原来的世界,语言要定义得单,让客戯使用Q不要设计包|万象的东西 <br /> buaawhl 10:38:07<br /> 江南白衣(228013) 10:37:10<br /> 我还是认a和API之间的差别是巨大的?br /> 而且APiq受很多l承阿,多重l承阿之cȝ~程语言本n的限制?br /><br /> 应该?是?关键字?和?API之间的差别吧 <br /> 江南白衣 10:38:18<br /> MF_LOP== GPQ微软Y件工厂,JetBrains MPS三线发展... <br /> magicgod 10:38:23<br /> 甚至对于一个项目就设计一U语a <br /> magicgod 10:38:41<br /> 然后实际上的软g开发核心让用户来开发,哈哈Q完啊 <br /> 庄表?10:39:20<br /> 哪有q么单,最为困隄部分Q就是将真实世界Q抽象、界定ؓ含义清晰的需求世界的工作?<br /><br />  <br /> buaawhl 10:39:18<br /> magicgod(2240529) 10:38:23<br /> 甚至对于一个项目就设计一U语a <br /> magicgod(2240529) 10:38:41<br /> 然后实际上的软g开发核心让用户来开发,哈哈Q完啊  <br /><br /> LOP文章是q么鼓吹的?-) <br /> magicgod 10:39:25<br /> 把需求变更的事{嫁到用户上去Q干脆我也不用了解业务了Q你自己玩去吧, <br /> 江南白衣 10:39:26<br /> to buaawhl:哈哈Q得找些语言学家和你聊聊天了Q)<br /> 即目前是关键字==API,也只是现Ӟ明天会更?<br /> magicgod 10:39:53<br /> 在一个小范围的功能中让客h方便定制Q象家电一?<br /> 庄表?10:39:59<br /> q是需要长期的l验U篏?<br /> buaawhl 10:40:15<br /> :-) 明天Q当然。我只是力图破除 商业概念?q信?<br /> 江南白衣 10:40:22<br /> 微Y那个work beachQ又有h试了没有Q?<br /> magicgod 10:40:39<br /> 其实DSL也不是什么先q的概念Q只是老调重弹而已 <br /> magicgod 10:41:02<br /> IT界需要这L东西Q快被用户逼疯了,目已经成ؓ人际关系的?<br /> buaawhl 10:41:02<br /> 不要被误g。这些厂?的成功决不是因ؓ什么DSL。完全是行业l验的积累?DSL只是他们炮制出来的壁垒和规则?<br /> buaawhl 10:41:34<br /> 用户的培训也是一大笔费用?<br /> magicgod 10:41:57<br /> 那是QDSL是帮助厂家来专注C务上?<br /> 江南白衣 10:42:11<br /> Domain Specific Tools CTP Released for Visual Studio 2005 Beta 2<br /> http://www.theserverside.net/news/thread.tss?thread_id=34253 <br /> buaawhl 10:42:20<br /> p那个电信的例子。不l过培训QMM怎么?DSLQ?<br /> magicgod 10:42:28<br /> 用不着再追新技术,到此为止了,框架也不需要了Q干脆,׃上DSL吧,哈哈 <br /> buaawhl 10:42:51<br /> 而且Q那些DSL的逻辑语法极其单,其实是v着 数据的作?<br /> magicgod 10:42:51<br /> 只要培训成本与原来持q_?<br /> 江南白衣 10:43:13<br /> 微Y不是dQ如果别人是学院zpQ微软的加入臛_说明炚w题?<br /> buaawhl 10:43:41<br /> 不可能啊。DSL只有 MS, iLogq样的大公司才搞得v。那属于规则制定?br />  <br /> buaawhl 10:44:02<br /> 公?不要想着 定义自己?DSL <br />  <br /><br />  <br /> magicgod 10:44:03<br /> 行不行的拉出来溜溜,目前成功的DSL已经有了Q就看各软g公司如何制定DSL <br /> 江南白衣 10:44:22<br /> MS提供的是工具?.... <br /> magicgod 10:45:00<br /> 术语Q规则都可以直接制定Q那么支持DSL开发的厂商昄是成本更低了 <br /> buaawhl 10:45:08<br /> 白衣再把那个ms dsl发来Q我仔细看看  <br /> magicgod 10:45:18<br /> 各行业应该都会干q事?<br /> buaawhl 10:45:40<br /> 我先详细了解一?MS DSL的用法 ?<br /> 江南白衣 10:47:05<br /> 那要先装vs2005b2,我机上只有vs2003,一直没试呢?<br /> 江南白衣 10:47:20<br /> http://www.theserverside.net/news/thread.tss?thread_id=34253 <br /> buaawhl 10:49:11<br /> q就是刚才那个连接,我还有。我是说Q你前几天发来的新闻。 ?是啊Q我也没?005。没办法试验。也看不?demo <br /> 江南白衣 10:49:31<br /> what新闻Q?<br /> 江南白衣 10:49:47<br /> 今天另一个比较好的发布信息是<br /> Backport175 1.0 released: Annotations for Java 1.3 & 1.4 Qcodehaus出的?<br /> buaawhl 10:50:08<br /> MS DSL Tool 发布的新闅R好像有用户体验 <br /> 庄表?10:50:10<br /> 有没有Flashq样的动态演C呢Q?<br /> 江南白衣 10:51:01<br /> 俺那个针Ҏ目的ORMQ可以用annotation了:Q?br /> 之前要包含一个meta class,像groovy那样?<br /> buaawhl 10:50:59<br /> 其实Q从我内心的感觉QDSL Tool = Javacc<br />  <br /> 江南白衣 10:51:28<br /> 是超U加强版的javacc <br /> buaawhl 10:51:32<br /> iLog 那套单的 if ... then  ....   我用javacc也能做出来?<br /> buaawhl 10:52:05<br /> 当然有IDE支持 <br />  风之?10:52:10<br /> iLOG的关键是动作语义 <br />  风之?10:52:19<br /> 不是if..then <br /><br />  <br /> 江南白衣 10:52:25<br /> 看hibernate里用antlr译Hql,用EBNF语法慢慢表示Q篏MQ而且q有很多不如意的地方Q他自己注释h很多todo... <br />  风之?10:52:48<br /> Action Semantics <br /> buaawhl 10:53:03<br /> 但你q里看到QDSL IDE里面Q关键字都在下拉框里面。这里的关键?q当于 数据了?<br /> buaawhl 10:53:09<br /> Action SemanticsQ?<br /> 江南白衣 10:56:24<br /> Quality-focused Groovy 1.0 pre-release 2 is out<br /> http://www.theserverside.com/news/thread.tss?thread_id=34587<br /> q篇文章的讨论很搞笑...大部分h都在?br /> i use groovy for<br /> 1. ...<br /> 2. ...<br /> 很像枪手们在旺场 <br /> buaawhl 10:56:42<br />  风之?17256936) 10:52:10<br /> iLOG的关键是动作语义 <br /><br /> 啥叫动作语义Qfor example?   我将来的一个主要理惻I是肃清 buzz word的迷信。?<br /> 江南白衣 10:56:54<br /> 不过的确列D了动态语a一些可用的地方?<br /> 庄表?10:57:01<br /> 是啊是啊Q新词太多,?<br /> buaawhl 10:57:10<br /> http://www.brics.dk/Projects/AS/   Action Semantics<br /> Home Page  <br /> 庄表?10:57:16<br />   <br /> buaawhl 11:03:16<br /> 3.2 ILog的BAL(Business Action Language)--最完美的王者?<br />    没有实际用过Q只能看文档q过瘾。从文档来看Q配合Ilog的编辑器Q的就是最完美的规则语a了?br /><br /> If    the call destination number is the preferred numberThen     apply the preferred number rate<br />  <br /> 江南白衣 11:05:12<br /> to buaawhlQ?br /> 关键?=API,我觉得你抓得很对,很快抓住了Ilog的本?<br /> 但是,抓得太快会忽略了语言的中间过E? <br /> 江南白衣 11:05:28<br /> L下面q段:<br />  <br /> 江南白衣 11:06:00<br /> 如果我们有一辆购物R <br /><br /> q且购物车里面至有两g物品 <br /><br /> q且购物车里面的物品不超q四?<br /><br /> q且如果购物车里面的商品价D是100元 <br /><br /> q且如果客户是黄金客?<br /><br /> 那么׃ؓ该客h八五?<br /><br /> q且昄信息“我们ؓ您黄金客h了八五折?<br />  <br /> buaawhl 11:06:46<br /> q是一个?and  逻辑 <br /> buaawhl 11:07:02<br /> 没有 or ,  很简单?<br /> 江南白衣 11:07:04<br /> q就是一D规则语a.<br /> 如果我们先不抓ilog,而是自己也做一ơ语a分析的练?那你分析门语a有什么要素呢? <br /> 庄表?11:07:39<br /> q样的规则语aQ?<br /> buaawhl 11:07:47<br /> 要素Qwhat do you mean ?    <br /> 庄表?11:07:49<br /> 我编一个,你看看算不算Q?<br /><br />  <br /> 庄表?11:07:57<br /> 我们l他100?<br /> 庄表?11:08:10<br /> 如果他觉得够了,我们׃再给?<br /> 庄表?11:08:21<br /> 如果他觉得不够,我们再l?00 <br /> 庄表?11:08:33<br /> 如果他觉得够了,我们׃再给?<br /> 庄表?11:08:41<br /> 如果他觉得不够,我们再l?00  <br /> femto 11:08:42<br /> 。。。?<br /> 庄表?11:08:46<br /> 如果他觉得够了,我们׃再给?br />  <br /> 庄表?11:08:47<br /> 如果他觉得不够,我们再l?00   <br /> femto 11:08:49<br /> 他觉得够不够的标准是什?<br /> femto 11:08:51<br /> 。。。?<br /> femto 11:08:59<br /> 老庄l口令阿。?<br /> 庄表?11:09:06<br /> 够不够是一个用戯入呀 <br /> femto 11:09:10<br /> 呵呵 <br /> buaawhl 11:09:19<br /> condtions to meet = { 我们有一辆购物R <br /><br /> 购物车里面至有两g物品 <br /><br /> 购物车里面的物品不超q四?<br /><br /> 如果购物车里面的商品价D是100元 <br /> 客户是黄金客?<br />    }<br /><br /><br /> ׃ؓ该客h八五?<br /> 昄信息“我们ؓ您黄金客h了八五折?<br />  <br /> 江南白衣 11:09:45<br /> 我的分析上面那段规则语言的要素有<br /> if ,then, and ,or<br /> > ,=,>=,<=, is ,数?一些关键字,如黄金客? 单位(金),购物车,物品... <br /> buaawhl 11:09:58<br /> where is Or ? <br /> femto 11:10:03<br /> 以规则语aZ心的应用应该?<br /> femto 11:10:07<br /> 一寚w辑 <br /> 江南白衣 11:10:07<br /> 好,q段没有. <br /> femto 11:10:14<br /> 一堆逻辑 <br /><br />  <br /> femto 11:10:16<br /> l常修改 <br /> femto 11:10:28<br /> q样使用才有必要 <br /> femto 11:10:39<br /> 否则传统的编E够解决了 <br /> 庄表?11:10:42<br /> 白衣Q那我刚才的那段Q算不算规则语言Q?<br /> buaawhl 11:11:03<br /> ,单的条g循环 <br /> phalanger 11:11:19<br /> 可以用数理逻辑证明一l规则是否完备,问题是所谓的完备的逻辑pȝQ就是现在目前大多数语言所拥有的那样子?<br /> 江南白衣 11:11:47<br /> so,ilog的语a是 q些if,then,and ,>,<,is加上一些关键字的支持,q就是ilog的DSL了?br /> 你可以说它简单,但他需要这栗?br /> 然后Q我们还可以分析用这个思\Q其他的领域的DSL<br />  <br /> 庄表?11:12:04<br /> q要正常的取ƾ机逻辑中,q要包括Q三ơ以内,金额_Q每ơ取NӞ <br /> 庄表?11:12:41<br /> 要表达这U“复杂逻辑”,while语句是很自然需要的 <br /> 庄表?11:12:46<br /> ilog里有没有Q?<br /> buaawhl 11:12:51<br /> 是的。我同意,iLog的语法很清楚?-) <br /> buaawhl 11:13:40<br /> 我的意思是_VB{,一样可以这么清?<br /> buaawhl 11:13:51<br /> 或者,我用 Javacc也可以作么清楚地?<br /> phalanger 11:14:09<br /> 很多语言一开始的时候都是很清楚的,慢慢发展来不清楚而已 <br /> magicgod 11:14:30<br /> 我怀疑DSL的走向会不会象普通语a一?<br /> buaawhl 11:15:02<br /> 我怀疑DSL有没有必要。简单的东西Q用什么表N是简单的?<br /> 江南白衣 11:15:14<br /> 不要只抓着ilog不放嘛,从ilog看DSL的整个思\Q从java,VBq些通用语言中分d来,只有自己最关键的关键字Q还有行业特有的关键?.... <br /> buaawhl 11:15:29<br /> 行业Ҏ的关键字<br />  <br /> buaawhl 11:15:42<br /> 寏V这才是关键 <br /> 庄表?11:15:45<br /> 是不是还会有目Ҏ的关键字Q?<br /><br />  <br /> phalanger 11:15:53<br /> 一开始大安只会有条Ӟ循环Q布逻辑Q基本四则运几个简单东ѝ但慢慢什么函敎ͼ子过E什么ؕ七八p的东西׃因需求而生,慢慢׃变得庞大 <br /> buaawhl 11:16:15<br /> 最重要的积累就在这里。一个行业的业务规则变化很小?<br /> buaawhl 11:16:41<br /> iLog的成功,完全?行业关键字(行业APIQ的U篏?<br /> magicgod 11:17:00<br /> DSL是要用客L悉的关键字而不是程序员 <br /> buaawhl 11:17:14<br /> 和DSL关系不大。DSL是用来圈地的。但是,lh一U印象,DSL是成功的关键?<br /> magicgod 11:17:28<br /> q就是区别吧QDSL要让业务专家来设计的Q而不是程序员 <br /> magicgod 11:17:43<br /> 实现估计q是用传l程序来实现 <br /> buaawhl 11:18:31<br /> magicgod(2240529) 11:17:28<br /> q就是区别吧QDSL要让业务专家来设计的Q?br /><br /> 你的意思是_业务专家来定?业务关键字? <br /> buaawhl 11:18:52<br /> q是_业务专家 用DSL 输入那些规则Q?<br /> phalanger 11:19:10<br /> 业务专家的思维方式也会慢慢遵@E序员的发展q程慢慢变化的。例如某天他们会发现某着业务逻辑几个地方都会用到Q于是函?子过E的需求就会应q而生 <br /> magicgod 11:19:16<br /> 是业务专家来描述DSL <br /> magicgod 11:19:28<br /> 所以业务专家必M证纯正的业务专家 <br /> buaawhl 11:19:40<br /> 你是_业务专家来定义DSLQ?<br /> magicgod 11:19:43<br /> 业务专家要脓q的是最l用戯不是程序员 <br /> phalanger 11:19:55<br /> 不能因ؓ别h是业务专家就扼杀别h的逻辑能力?<br /> magicgod 11:19:55<br /> 是的Q其实这是一U定义业务标准的q程 <br /> 一剑們ֿ 11:19:59<br /> 庄表伟,关于OO的哲?br /> http://canonical.blogdriver.com/canonical/761080.html<br /> 庄表?11:20:05<br /> 不懂~程的业务专Ӟ也定义不好DSL的吧 <br /> magicgod 11:20:16<br /> 不是的,业务专家不应该懂~程 <br /> magicgod 11:20:44<br /> ~程是一U附加,业务专家p定义需求一PҎ不考虑实现的问?<br /><br />  <br /> magicgod 11:21:03<br /> 而只提出要什么,q且用什么来描述对行业内某部分客h最适合?<br /> buaawhl 11:21:10<br /> DSL Tool 是l?业务专家用来定义DSL的? <br /> phalanger 11:21:19<br /> 例如没有函数Q业务专家会发现有些东西改了Q他׃很辛苦的逐个去该每一个逻辑。虽然他不一定会提出“函数”这么抽象的东西Q但实际上它q是有这L需?<br /> magicgod 11:21:48<br /> 估计q得找h译一把,dsl toolq没q么?<br /> buaawhl 11:21:58<br /> yes. 如果逻辑复杂C定程?那么dsl失M用武之地?<br /> phalanger 11:22:00<br /> 慢慢得当函数不能满需求的时候,业务专家同样会提出很多很多类gE序员需要的东西Q慢慢得OO也就会出来了 <br /> magicgod 11:22:08<br /> 实际上业务内的逻辑q没有相象得q么复杂 <br /> 庄表?11:22:09<br /> H然联想到Hibernate的数据库冬眠理想Q事实上是,如果不能深刻理解数据库,Ҏ用不好Hibernate <br /> 江南白衣 11:22:12<br /> 我已l决定try一把之前先不讨Z:) <br /> magicgod 11:22:25<br /> DSL的目的就是ؓ了让逻辑单下?<br /> buaawhl 11:22:41<br /> 而简单的情况Q一般的脚本描述h也很单。?yes. support 白衣' try. thanks.<br />  <br /> magicgod 11:22:44<br /> 阉Kl我看一下某牛h分析的WEBQ其实是一张大图,象非常简?<br /> 一剑們ֿ 11:22:53<br /> 谁先举一个现实的例子出来Q认为DSL好的人拿Z个实际的例子<br /> phalanger 11:23:05<br /> 事务是会发展的,java出来的时候也没有惌后来会这么复?<br /> magicgod 11:23:17<br /> java出来的时候已l是一个复杂的cd?<br /> magicgod 11:23:36<br /> 因ؓ计算a出来大多是解x有问题的Q而不是解军_范围问题 <br /> magicgod 11:23:50<br /> 现在的DSL是Z解决范围问题,而省去OOQ甚至省d?<br /> 江南白衣 11:24:02<br /> DSL现在一直以SQL做例?....q是对API论最好的打击  <br /> buaawhl 11:24:08<br /> to zhuang : O R 的目的,是ؓ了把 relation db 作ؓOODB来用?<br /> magicgod 11:24:23<br /> E序员以q计算a可以解决所有的问题Q但是实际上仅仅是理Z可以解决 <br /><br />  <br /> buaawhl 11:24:33<br /> SQL里面q有函数呢?:-) <br /> magicgod 11:24:42<br /> 实际上外部限制太多了Q根本无法解x有问?<br /> 江南白衣 11:24:53<br /> 但它是基于sql语言框架下的函数 <br /> buaawhl 11:24:56<br /> decode(),  to_chart()    sql需要这些API做什么? <br /> magicgod 11:24:57<br /> 所以DSL提出p军_数问题来创徏一U语a <br /> 江南白衣 11:25:12<br /> 但它是基于sql语言框架下的函数  <br /> magicgod 11:25:18<br /> 实际上整个SQL定义是非常简单的Q相比于JDK来说 <br /> buaawhl 11:25:20<br />   java function 也是Z java语言框架下的函数 <br /> buaawhl 11:25:39<br /> sql能表辄东西也很?-) <br /> magicgod 11:25:39<br /> 我觉得应该把SQL与整个JDK相比?<br /> magicgod 11:25:51<br /> 是的Q就是用单的东西来解决简单的?<br /> buaawhl 11:26:05<br /> 比较一下功能好了。SQL可以实现 刚才 白衣l出?规则吗?<br />  <br /> magicgod 11:26:08<br /> 因ؓ计算a面向所有问题,但是客户只面向子?<br /> 庄表?11:26:10<br /> ׃Qؕ了,我们在缕一~?<br /> 江南白衣 11:26:18<br /> 但java语言本n没有办法很直观的表达 select xxx from的语a。问问你喜欢用hibernate的Critera APiq是用hql? <br /> magicgod 11:26:21<br /> 我们需要非常方便的子集来面向客L子集 <br /> 庄表?11:26:24<br /> SQL与JDK是一回事 <br /> 庄表?11:26:37<br /> 数据库与领域又是另外一回事 <br /> 庄表?11:26:52<br /> 从概忉|_我支持magicgod的我们需要非常方便的子集来面向客L子集 <br />  <br /> magicgod 11:26:55<br /> DSLq不是什么创斎ͼ 其实很象HTML <br /><br />  <br /> 江南白衣 11:26:58<br /> 数据库查询就是一个领域阿 <br /> buaawhl 11:27:03<br /> DSL如何表达  select ... where ? <br /> 庄表?11:27:14<br /> 但是从实际的语法来说Q我认ؓilogq样的语法,是cobol的复?<br /> magicgod 11:27:19<br /> 有没有觉得?HTML是XML的一个子集,用来解决览的问?<br /> 江南白衣 11:27:36<br /> SQL语言啊, select where是SQL DSL的关键字和特定语法?<br /> 庄表?11:27:37<br /> 吃饭M <br /> buaawhl 11:27:50<br /> filter( collection,  { a = 1;} ) <br /> buaawhl 11:28:18<br /> q个 STL-like 是 select ... where <br /> magicgod 11:28:25<br /> 所以HTML行?<br /> 江南白衣 11:28:34<br /> 寚wQ但是怎么大部分程序员习惯 where a=1多于<br /> filter(collection,{a=1})?<br /> magicgod 11:28:40<br /> 但后来h们要让HTML来解x有问题,所以XML行?<br /> magicgod 11:29:15<br /> 感觉q是要从客户和低水^人员的角度来考虑 <br /> magicgod 11:29:27<br /> idea会过期? <br /> 江南白衣 11:29:39<br /> 是阿Qhtml,sql, DSL其实早就无处不在了?br /> 只是现在明确提出了,刉?DSL的工兗?<br /> buaawhl 11:29:42<br /> I c your point. 你是_某个特定领域Q就是某U语a才适合 <br /> magicgod 11:30:02<br /> 应该是这个意?<br /> buaawhl 11:30:12<br /> 问题是我说的Q那些规则表辄领域QDSLq没有表现出SQLq样的优?<br /> buaawhl 11:30:27<br /> q没有显C出来他们特有的 适合?<br /> buaawhl 11:30:42<br /> 因ؓq些DSL在表?if , then, else. <br /> magicgod 11:30:42<br /> 应该说DSLL适合?<br /><br />  <br /> magicgod 11:31:13<br /> 因ؓDSL非常狡猾Q如果领域扩大了Q那么DSL可以扩大ؓ某种计算aQ比如JAVA <br /> buaawhl 11:31:12<br /> 比如QVB, pascal {,优势不是很明显?<br /> magicgod 11:31:24<br /> q也是DSLQ只不过用来解决的领域扩大了 <br /> buaawhl 11:31:34<br /> 不觉得,DSL 有表?if, else, then 的优ѝ?<br /> 江南白衣 11:31:32<br /> 有可能, ilog的关键字太少Q语法太贴近通用语言Q所以优势不明显:0 <br /> magicgod 11:31:50<br /> DSL是贴近用户来描q啊Q让用户的学习成本下?<br /> buaawhl 11:32:00<br /> yes. :-) <br /> buaawhl 11:32:23<br /> 业务用语  成ؓ DSL关键字?<br /> magicgod 11:32:24<br /> 毕竟出发点不同,所以在l节使用斚wQDSL显C出优势 <br /> magicgod 11:32:37<br /> 更重要的是DSL是业务专家来设计的,而不是计机专家 <br /> magicgod 11:32:43<br /> 我希望的是这?.. <br /> buaawhl 11:32:53<br /> 业务用语  成ؓ DSL关键字?q才?真正的优ѝ?br />  <br /> q佌 11:33:04<br /> 业务专家来设计DSLQ估计也D?<br /> q佌 11:33:09<br /> 够呛 <br /> 江南白衣 11:33:14<br /> 但L语法不脓q通用语言的领域的QSQL是其一Q我们^时的领域更加了。V <br /> magicgod 11:34:13<br /> 只能׃务专家来设计Q因为领域内的语a׃务专家最?<br /> magicgod 11:34:23<br /> pSQL是数据库领域内一?<br /> buaawhl 11:34:27<br /> yes. 有些理解了。?同样Q这些领域的特点是 逻辑_单。而业务用词够特D?<br /> magicgod 11:34:58<br /> 是的Q因为就是要解决Ҏ的问题,没必要用解决所有问题的语言?<br /> magicgod 11:35:13<br /> 实际上根本不存在要解x有问题的客户 <br /><br />  <br /> magicgod 11:35:36<br /> 其实客户是不需要JAVA和JDK,只需要DSLcM描述 <br /> buaawhl 11:36:22<br /> DSL Tool能够提供q样的定义能力?不同领域的用P都可以用同一个DSL tool 创徏自己?DSLQ?<br /> magicgod 11:36:32<br /> 是看清楚了q种事,才提交DSLQƈ且每一个项目来创徏一UDSL <br /> buaawhl 11:36:38<br /> q是_每个行业一?DSL? <br /> magicgod 11:37:09<br /> 都可以,看你实施?<br /> 江南白衣 11:37:09<br /> DSL Tool,是GP,JetBrains, MS努力的梦惟?<br /> buaawhl 11:37:24<br /> 每个目Q这太可怕了? 学习成本再低Q也不能q么折腾?<br /> magicgod 11:37:28<br /> 而DSLL业务专家q个角色来设计了 <br /> magicgod 11:37:57<br /> 其实也是q样Q第一个项目设计一个DSLQ第二个目改一把就行了 <br /> buaawhl 11:38:19<br /> DSL Tool的关键还是要深入 各业务领域的通用斚w?<br /> 江南白衣 11:38:43<br /> 内里的实现还是java,c#的lib <br /> magicgod 11:38:56<br /> 是的Q现在就是将真正的业务应用上ȝ时候了 <br /> magicgod 11:39:10<br /> 抛开׃八糟的框架和q_Q用户和专家不关心这?<br /> magicgod 11:39:36<br /> 谁能直接面向需求,谁就有主动权 <br /> buaawhl 11:39:38<br /> 用户和专家本来就不关心这?Q?-) <br /> magicgod 11:39:51<br /> IBM的随需而动是有炚w理的 <br /> buaawhl 11:40:04<br /> 不用DSL, 他们也从来不兛_q些?-) <br /> magicgod 11:40:06<br /> 但是现在E序员限制了用户和专Ӟ必须来考虑q些问题?<br /> buaawhl 11:40:27<br /> 用了DSL,他们反而要兛_q些, <br /> buaawhl 11:40:45<br /> 江南白衣(228013) 11:38:43<br /> 内里的实现还是java,c#的lib <br /><br />  <br /> magicgod 11:40:55<br /> 不会吧,DSL本来是没有这些细节的 <br /> buaawhl 11:41:12<br /> 如果以前要关心java, c#Q那么现在不仅要兛_java, c#,q要兛_ DSL. <br /> buaawhl 11:41:41<br /> 那你_以前业务专家Z么要关系 java, c# ? <br /> buaawhl 11:42:01<br /> 他们只是做业务分析?<br /> magicgod 11:43:07<br /> 因ؓE序员要兛_ <br /> magicgod 11:43:31<br /> E序员反馈给业务专家说这个java不支?<br /> magicgod 11:44:00<br /> 而现在DSL希望能完全解册业问题吧 <br /> buaawhl 11:44:40<br /> DSL下面的实Cq是java吗?E序员反馈给业务专家说这个java不支?<br /><br />  <br /> 江南白衣 11:44:42<br /> DSL是需要{译成JavaQC# lib的,天上暂时q没馅饼下来  <br /> magicgod 11:44:55<br /> 本来也就是这L <br /> magicgod 11:45:17<br /> q~译了,也是要{成硬件代码的?<br /> buaawhl 11:45:26<br /> 所以,专家定义DSL的同Ӟq要考虑java是否支持 <br /> 江南白衣 11:46:20<br /> 有直接翻译成机器码和译成java,c#的选择Q?br /> 昄直接译成机器码的难度大NN倍?<br /> magicgod 11:46:36<br /> 估计是假定java全支持了?<br /> magicgod 11:46:37<br /> 因ؓ毕竟DSL是子?<br /> buaawhl 11:47:08<br /> yes. :-)  <br /> magicgod 11:47:09<br /> 正在试用mps <br /> buaawhl 11:47:49<br /> 如果DSL Tool考虑了Java支持。那么专家就不用考虑了?<br /> magicgod 11:48:29<br /> 是的Q估计是q样想的 <br /> magicgod 11:48:53<br /> DSL是朴素的l验M向理论发展的产物 <br /><br />  <br /> magicgod 11:49:51<br /> 定义一个DSL真是复杂啊,非得有h辅助不可?<br /> q佌 11:50:12<br /> 专家应该知道些什么呢Q达C什么层ơ的知识Q?<br /> buaawhl 11:50:45<br /> DSL可以看作是一U数据格式,一U配|文件的格式定义?<br /> magicgod 11:50:47<br /> q个概念定义跟类定义不是一样啊Qft <br /> magicgod 11:51:07<br /> 专家角色应该只知道业务知识,其他不懂Q假定,哈哈 <br /> buaawhl 11:51:35<br /> 一开始,DSLq是摆脱不了 Programm Languange的框子,明天会更?!!! <br /> q佌 11:51:51<br /> 什么层ơ的知识Q是元层ơ?元元层次Q?<br /> magicgod 11:52:29<br /> 见鬼了,q东西一定是l程序员用的 <br /> magicgod 11:52:34<br /> q脆定义cȝ?<br /> buaawhl 11:52:46<br /> 一开始,DSLq是摆脱不了 Programm Languange的框子,明天会更?!!!   <br /> 江南白衣 11:54:27<br /> 另外magic god可以留意一下MPS同时定制IDE斚w的功能,q是以前yacc没有?<br /> buaawhl 11:55:37<br /> 我们q是要忙着写API, 到时候,用DSL包装成关键字 p?<br /> 江南白衣 11:56:54<br /> magic god可以上班旉试mps,太爽?<br /> 江南白衣 11:57:02<br /> 一定是PM以上U别:) <br /> 江南白衣 11:57:59<br /> q有那些11点就喊着d饭的..... <br /> magicgod 12:03:58<br /> 恐怖,q个操作太可怕了 <br /> magicgod 12:05:32<br /> rubyWeb? <br /> magicgod 12:08:41<br /> 代码生成居然有错Q! <br /> 江南白衣 12:15:47<br /> 加a <br /><br /><br /><br /> magicgod(2240529) 12:49:15<br />  更象一个代码生成器 <br /> magicgod(2240529) 12:49:46<br /> q把我的ctrl+spacel废?<br /> magicgod(2240529) 12:50:19<br /> q个生成器好象有点太直接了一?<br /> magicgod(2240529) 12:50:53<br /> 丄例子实在不恰当啊Q这回JETBRAINS有点׃ <br /> magicgod(2240529) 12:51:49<br /> BUG也太多了一点,需要写一些行业例子,q样有代表性了 <br /><br /> magicgod(2240529) 12:56:28<br /> 臛_比PETSTORE更高一U的案例Q然后用q个案例来套各种Ҏ和工h较好一?<br /> magicgod(2240529) 12:56:52<br /> q个HELLOWORLD 最后生成了JAVA代码Q有Ҏ?br /><img src ="http://www.aygfsteel.com/wadise/aggbug/41987.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/wadise/" target="_blank">wadise</a> 2006-04-19 19:16 <a href="http://www.aygfsteel.com/wadise/archive/2006/04/19/41987.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>贫血的领域模?/title><link>http://www.aygfsteel.com/wadise/archive/2005/12/16/24209.html</link><dc:creator>wadise</dc:creator><author>wadise</author><pubDate>Fri, 16 Dec 2005 06:52:00 GMT</pubDate><guid>http://www.aygfsteel.com/wadise/archive/2005/12/16/24209.html</guid><wfw:comment>http://www.aygfsteel.com/wadise/comments/24209.html</wfw:comment><comments>http://www.aygfsteel.com/wadise/archive/2005/12/16/24209.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/wadise/comments/commentRss/24209.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/wadise/services/trackbacks/24209.html</trackback:ping><description><![CDATA[<FONT size=1>在Martin Fowler文章</FONT><A ><FONT size=1>http://www.martinfowler.com/bliki/AnemicDomainModel.html</FONT></A><FONT size=1>中指出现在出现越来越多的贫血领域模型(anemia domain model)。那么血领域模型的概忉|什么呢Q老马指出Q?BR><BR></FONT><FONT color=#000000><FONT size=1><FONT size=+0><EM><FONT size=1>There are objects, many named after the nouns in the domain space, and these objects are connected with the rich relationships and structure that true domain models have. The catch comes when you look at the behavior, and you realize that there is very little behavior on these objects. Indeed often these models come with design rules that say that you are not to put any domain logic in the the domain objects. Instead there are a set of service objects which capture all the domain logic. These services live on top of the domain model and use the domain model for data.</FONT><BR></EM></FONT><BR></FONT><FONT size=+0><FONT size=1>也就是说在领域模型中Q本w只处理很少的行为逻辑Q大多数都是处在模型上层的一pd的ServicecL负责捕获处理q些领域逻辑行ؓ。这q背了OO思想QOO认ؓ应该把数据和行ؓ合在一P?BR><BR>Eric Evans在他的Domain Driven Design中说q:<BR></FONT> <BLOCKQUOTE><I><FONT size=1>Application Layer [his name for Service Layer]: Defines the jobs the software is supposed to do and directs the expressive domain objects to work out problems. The tasks this layer is responsible for are meaningful to the business or necessary for interaction with the application layers of other systems. This layer is kept thin. It does not contain business rules or knowledge, but only coordinates tasks and delegates work to collaborations of domain objects in the next layer down. It does not have state reflecting the business situation, but it can have state that reflects the progress of a task for the user or the program.</FONT></I></BLOCKQUOTE> <BLOCKQUOTE><I><FONT size=1>Domain Layer (or Model Layer): Responsible for representing concepts of the business, information about the business situation, and business rules. State that reflects the business situation is controlled and used here, even though the technical details of storing it are delegated to the infrastructure. This layer is the heart of business software.<BR><BR><BR></FONT></I></BLOCKQUOTE> <P><FONT size=1>据说在Thoughtwork公司里面采用的技术是Hibernate+Spring+webworkQ关于anemia domain model有不员工在公司内部邮g中发问老马应该什么正用。但是老马q没有给出确切答案,只放入TODOList厅R?BR>我个的DomailcM不应该含有过多的与之无关的行为,不但q反了单一职责的原则,q得整个系l不够稳定。例如User中有RolesQ那么addRole,removeRole自然应在DomaincUser中写Q至于removeUser,loadUser{应该封装成Daod理?BR><BR>引用robbin在一ơ讨Z的回复:<BR><BR></FONT><FONT size=1><span id="wmqeeuq" class=postbody><EM>我的理解是Martin大叔所谓的domain object是?SPAN style="COLOR: red">领域模型</SPAN>”,它是一个针对业务逻辑抽象的模型,和Y件编E根本毫无关pR即使你不开发这个YӞ你仍焉要抽象你的业务逻辑得到你的领域模型?SPAN style="COLOR: red">q个领域指的是你所从事的行业,而不是狭隘的持久化类</SPAN>?<BR><BR>q且领域模型的徏模也是在需求分析阶D,或者在需求分析阶D之前完成的事情。具体到~程的过E中Q领域模型ƈ非对应某一个Javac,如果一定要对应的话Q(业务对象QDao接口QHibernate实体c)他们合v来统U领域模型在Java语言的实现。把 <SPAN style="COLOR: red">商业建模范畴的“领域模型”拿来当做Hibernate~程中的实体c,Ҏ是牛头不对马嘴</SPAN>!<BR></EM></SPAN><BR><EM>其实你的d是把持久化实体cȝ持久化操作附着到实体类上面去,而不是分开。D例来_也就是说Accountcȝ增删Ҏ不应该单独分dAccountDao接口去,而应该把增删Ҏ操作攑֜Accountc里面来完成Q对不? </EM></FONT></P> <P><FONT size=1><EM>那么我在解释q个问题之前Q必L清一点,是q个问题的讨论,x久化操作是否应该单独抽象一个DAO层的问题是和Martin Fowler提到了血的领域模型毫无关pȝ。实际上传统的Entity Bean是q种把持久化操作附着到Entity Bean本nȝQ但是Martin Fowler一样在_q种Entity Bean是贫血的?</EM></FONT></P> <P><FONT size=1><EM>好了Q我们现在把其他无关因素排除了,focus到这个话题上Q就是我们是否需要DAO接口的问题了。因为按照你的观点,如果把对象的增删Ҏ都放在实体类上面Q其实我们就不需要DAO接口层了Q业务对象和Web Action都可以直接调用实体类本n来完成持久化操作了?</EM></FONT></P> <P><FONT size=1><EM>大概?003q以前,我一直就是采用这U模型的Q但是从2003q开始,我就Ҏ了分M个DAO层来专门处理持久化操作了。原因是多方面的Q从技术角度来考量的话Q分d有很多好处,Rod Johnson在《without EJB》第10章持久化里面pl阐qC需要DAO层的理由Q我你看一下,q里不复qC。只谈一下除了Rod Johson提到理由之外的理由: </EM></FONT></P> <P><FONT size=1><EM>作ؓ保持状态的实体c,他的职责是保持状态,而不负责状态的持久化。如果把持久化操作也攑֜实体cMQ一斚w来说Q把两种不同的职责放在一个类中,q不W合OCP的单一职责的原则,然而更重要的原因是会带来实体类的不E_的问题?</EM></FONT></P> <P><FONT size=1><EM>在我的理念中Q实体类以及实体cd联关pL一个Y件系l中最E_不变的部分,在整个Y件系l中Q各个层面都需要涉及到实体cȝ操作Q如何划分实体类Q以及确定实体类兌是最费考量的,定了这一点,整个软gpȝ底层依赖关pd被确定下来了Q实体类的属性可以变化,׃软gpȝ对实体的操作都是以实体类为单位的Q所以实体属性的变化不会造成pȝ不稳定)Q上面的DAO层,业务层,Web层都只对实体cM生单向依赖?</EM></FONT></P> <P><FONT size=1><EM>如果你把DAO层合q到实体cMQ请注意本来Web层是不依赖于DAO层的QWeb层只依赖实体c(因ؓ它要展现实体cȝ态)Q但是由于你合ƈ了,使得Web层也变得依赖那些DAO层的操作了。这Ll果是让Y件系l的耦合性提高,可׾~性降低,可维护性降低?</EM></FONT></P> <P><FONT size=1><EM>DAO层的变动是大于实体类变动的,实体cd本上E_不变Q而Y件系l的需求变更几乎一定会带来DAO层的变动Q但是ƈ不会带来实体cd的变动(会带来实体属性的变动Q但是很会影响到实体类本nQ。所以DAO层的变动频率q远大于实体cR那么当你把DAO层操作合q到实体cM后,其结果就是让实体cȝ变动频率{于DAO层的变动频率。那么就会造成本来E_的实体类层变得变得频率高了很多,而实体类的变动会波及到Y件系l的每个层面Q造成软g大面U的相关性和不稳定?</EM></FONT></P> <P><FONT size=1><EM>误住很重要的一点:实体cL有状态的c,DAOcL无状态的c,在整个Y件系l中Q只有两U类有状态,一个是实体c,一个是HTTP Session。有状态的cM带来很高的代码相x,应该量减少有状态类的媄响范_量减少有状态类的变动频率,应该量减少有状态类的职责?</EM></FONT></P> <P><FONT size=1><EM>而你把DAO操作合ƈ到实体类以后Q结果就是扩大了有状态类的代码相x的范围和媄响范_扩大了有状态类的变动频率,最后就造成软gpȝ的稳定性下降?/EM></FONT></P></FONT></FONT><img src ="http://www.aygfsteel.com/wadise/aggbug/24209.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/wadise/" target="_blank">wadise</a> 2005-12-16 14:52 <a href="http://www.aygfsteel.com/wadise/archive/2005/12/16/24209.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ҵ</a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƽȪ</a>| <a href="http://" target="_blank">ƽԭ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ǭ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ͳ</a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ǫ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ʼ</a>| <a href="http://" target="_blank">ױ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ʲ</a>| <a href="http://" target="_blank">Զ</a>| <a href="http://" target="_blank">ζ</a>| <a href="http://" target="_blank">ǭ</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">ʡ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ָ</a>| <a href="http://" target="_blank">ʱ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>