Bold for Delphi推广第一贴:关于Bold for Delphi的应用现状的调查 (100分)

  • 主题发起人 EdwinYeah
  • 开始时间
to yyanghhong,也许是因为相对j2ee只做到了pure OO而bold做到了pure OO和RAD?
我不懂j2ee,请指教.
 
我对bold的感觉是他贪多嚼不烂. 他目前连一个好的Persistence和Business Delegation框架都没有. 谈做到了RAD和pure OO也过了吧. 他想把复杂的事情简单化. 但又实现不了企业架构的要求.
 
to yyanghhong:
看来阁下对持久化框架很了解,可否结合你的经验写一些心得?那样的话太感激啦!
 
谢谢EdwinYeah的推广!支持Bold!
希望更多做应用程序开发的程序员们,能把更多的注意力放在企业的业务建模上,从繁琐的技术细节中摆脱出来。Bold就有这个作用!
也请使用C#的朋友们多多关注 ECO (相当于Bold for C sharp), Borland C#Builder 是否能打败MS,这是一个重磅的炸弹,就快在BC#Builder Architecture中发布了。
 
许多J2ee的书都对持久化框架介绍的很详细, 象EJB design pattern,
我最近在borland的新闻组里看到borland的开发组正在讨论开发自己的持久化框架.
不过目前还没达成一致的意见.
 
to yyanghhong:
我指的是Bold for Delphi的使用经验,有时间不妨写几句给大家:)
 
对于OR Mapping的兴趣始于www.techinsite.com.au的一个开源的的框架tiOPF.后来觉得这个框架不满意才开始学习和查找这方面的资料等,在后来是Instandobject,DEPO(开源的),bold等等.对于bold这个框架我也没有深入的使用,只是使用过instantobject1.3做过一个小的程序,感觉还行.如果作比较大的程序使用bold比较合适.感觉bold处理对象以及对象间的关系比较强大,与UML建模设计思想符合很好(所谓模型驱动的开发).
对于使用bold而言,需要的是业务建模的功夫,而不仅仅是编程技术.这一点在以后也是一个方向(个人意见).
我终于忍受不了borland对delphi的淡漠(如果不去感什么c#的时髦,delphi.net早就应该出来了),终于下决心使用vs.net了.在这里面,关于OR Mapping的廉价解决方案,ms提供了一个data access block(由于太小,甚至只有一个help类,称不上什么框架,关键看你如何去使用它,扩展它).
 
这一贴让我对MM的犹豫,但是for .Net的,对我没有什么用处,还是学MM吧。
看来这儿高手不多啊,我的问题无人回答。
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2146966
 
J2EE对企业架构分的很清晰.标准的分为5层.
presentation --User interface
Application -Use-case UI work flow, syntac validation, interaction with service.
Services - controlling txns, business/workflow logic, actting as facade.
Domain - Thedo
main logic,do
min business logic, semantic validation
persistence - persistent storage ofdo
main state.
各个层有不同的pattern实现不同的需要, 比如Services 可采用session facade或EJB command pattern. 各个层的代码是分离的, 层之间采用接口来耦合. 对于小规模项目, 可以用合并层的方法来调整, 比如把domain和persistence 放一起, 但得根据一定的规范.
从这个划分来看bold, 他实现了是domain层与UML的映射. 但他的persistence对用户是不可见的. application和persention混在一起. service得靠用户去实现.

 
在以前的讨论上有人提及,一直想知道.帮你提,但我想这也许是个过渡的阶段的产物吧.
dreamer:你的书何时出版,听说是九月.
 
to 畅雨,
tiOPF的文档我也看过一部分,着实增益不少。
你说到borland对delphi的淡漠,我也有这种忧虑,真心希望delphi能长远发展,其实bold是很有前途的东西,但愿他的战略地位能得到重视,而不像活化石所说的,只是一个过滤性产品。
to yyanghhong:
非常感谢你的分析!希望随着我学习的深入可以多向你请教[:D]
 
to fhb,
你这种态度高手是不会理你的,我不是高手,本着希望更多的人使用MM、Bold等模型设计相关的工具的愿望,你的问题我答了,不当之处请指正。另外估计你没搞懂对这两者之间区别,也没认真看本贴。[:(!]
 
to 畅雨,
介绍你一个DotNet下的好的OR mapping和persistence框架,
https://sourceforge.net/projects/nhibernate/
java的hibernate是个非常好的东西. 概念相当清晰. 大有取代EJB的CMP的势头.
nhibernate是它的dotNet实现, 用他结合MVC框架的data access block, 这应该一个不错的
项目架构
 
太好了!吸引到这么多高手为我等开阔眼界!
 
建议成立一个分论坛,讨论此事情.
关于MM,我主要的问题是:
1.请提示:能用modelmaker所能表示的完整的文档类型;
2.class中 事件 如何表示?用什么图表示?
3。类中的方法中的逻辑算法流程图在UML(modelmaker)中如何表示?
 
yyanghhong的分析得有道理!整体上很有启发,我要好好学习一下J2EE的概念。
另外,由于我较多地试用过Bold,所以我想还对他的Bold观点做一些补充,供大家参考
>>>> 从这个划分来看bold, 他实现了是domain层与UML的映射.
对于UML,Bold仅完成了静态模型的映射,对于动态模型(状态机等)等没有实现映身
>>>> 但他的persistence对用户是不可见的.
1.对于高级开发员,O-R Mapping的策略是可见的,而且对于持久可以使用自定义的算法。
例如可以确定指定的类,它在持久时的继承实现是一表/二表还是三表方式,
组成/聚集是否组联删除等等,还可以自定义数据类型比如三维坐标,
然对自已扩展其持久方法及显示方式。
2.对于普通开发员不可见,我认为是个很好的特性。不知道大家怎么看。
如下例子,可以看到整个过程开发员无需与数据库打交道。
//我在项目中这样对一个员工进行学历的增加,学历内容简化
function AddEducationalBackground(AsName,AsContent:String):Boolean;
var
anEmployee :TBoldElement;
sOCL :String;
begin
sOCL := Format('Employee.allInstances->select(name=%s)',[QuotedStr(AsName)]);
//使用OCL取得对象数据,避免应数据库类型不同而造成的兼容性问题
anEmployee := DefaultBoldSystem.EvaluateExpressionAsDirectElement(sOCL);
if anEmployee <> nil then
with (anEmployee as TEmployee)do
begin
//员工与学历间为一对多关系,学历记录包括了起止时间/学校/专业/见证人等,此处简化
with EducationalBackground.addNewdo
begin
content := AsContent;
//细化有startDate:=AdtStartDate;...;school:=ASchool;reference:=AReferer;
end;
DefaultBoldSystem.updateDB;
//此处用updateDB保存所有新增数据,
//也可用anEmployee.save() 来保存
end;

end;

>> application和persention混在一起.
Windows下两层开发,很容易做成这样。个人认为这与是否采用Bold无关。
我现在的现在的开发中,做到了专用界面由用户用脚本(基于模板)的方式进行自定义,
而应用逻辑由系统开发人员提供。而普通界面,使用Bold以后可以看到界面根本不用进行
编程,可以使用统一的方法,根据类模型对类成员的描述自动生成界面。Bold提供了这方面
的示例(AFP),非常非常有意思:当你的业务模型根据用户要求发生变化时,您只需要改模型,
不用或者很少改动你的界面。
>> service得靠用户去实现.
我有一个疑惑:怎样做算是不"靠用户实现"?yyanghhong说得不是这个意思吧?
(Bold提供了COM解决方案,我试过使用ASP+COM进行开发,比较顺手。)
 
感谢道明德的回复. 我对bold没有正式在项目中用过, 只是自己试了一下, 一些高级功
能没有用到. 所以对他的看法不太全面. j2ee的架构是针对全部企业应用的. bold的着重
点是OR Mapping 和windows UI. 所以他对service, applciation层没有解决方案是正常的.
由于j2ee结构主要是用于分布式结构. service层不光是用来放business/work flow
logic, 他通过实现session facade来防止application层对domain层的直接访问, 这可以大
大减少application层直接调用domain对象所带来的Round Trip. 这在分布式架构中是个很
重要的设计.
另外application和presentation的隔离可使架构更加条理化. 这在windows程序中区别不是
很明显. 但在web程序中效果非常显著. 而且presentation界面元素和application层的映射
对实现权限安全模型很有帮助.用户可修改配置文件来改变权限. java 的标准web框架
struts采用Action Mapping和ActionForm来实现application和presentation层的映射,
delphi的TActionList 也是个application层和presentation层的映射实现方法. 不过只是
event和action的映射.
 
关于persistence的管理, 下面是java中的一个OR mapping框架hibernate对persistence集合的映射配置. 用户可对persistence集合进行很完整的控制, 比如lazy= true是用来表示只有当程序需要数据时才去访问database去得到数据, 这样可大大减少缓存. 程序员对persistence有一个好的控制对系统性能影响很大.
<map
name="propertyName"
table="table_name"
schema="schema_name"
lazy="true|false"
inverse="true|false"
cascade="all|none|save-update|delete|all-delete-orphan"
sort="unsorted|natural|comparatorClass"
order-by="column_name asc|desc"
where="arbitrary sql where condition">
<key .... />
<index .... />
<element .... />
</map>
 
Bold好像也支持lazy load
 
hubdog也来了, 多说两句嘛.
 
顶部