RSS 2.0 Feed
拥抱变化
摘要:给PPMM拍照,就是一个持久化的过程。 我们接下来的一个工作,是要把现有的一个系统升级到asp.net旧的设计 UI和数据的绑定 数据和数据库的绑定 参考 A Data Access Layer to persist business objects using attributes and reflectionhttp://www.codeproject.com/cs/database/dal1.asp An OO Persistence Approach using Reflection and Attributes in C#http://www.codeproject.com/dotnet/persistence_by_reflection.asp Data Access Component - declarative transactions at the method level without EnterpriseServices, different data sources supportedhttp://www.codeproject.com/cs/database/dal.asp Dynamically Bind Your Data Layer to Stored Procedures and SQL Commands Using .NET Metadata and Reflectionhttp://msdn.microsoft.com/msdnmag/issues/02/08/NETReflection/default.aspx ElegantORMhttp://blog.joycode.com/jgtm2000/posts/10064.aspx List of Microsoft patterns and practices for Application Architecture and Designhttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnanchor/html/listpattandpract.asp 一些post http://weblogs.asp.net/pwilson/archive/2004/01/14/58721.aspxhttp://weblogs.asp.net/pwilson/archive/2004/01/11/57651.aspxhttp://weblogs.asp.net/pwilson/archive/2004/01/09/49174.aspxhttp://weblogs.asp.net/pwilson/archive/2004/01/09/49014.aspxhttp://weblogs.asp.net/pwilson/archive/2004/01/07/48405.aspxhttp://weblogs.asp.net/pwilson/archive/2004/01/08/48722.aspx ...[阅读全文]

posted @ | Feedback (3) |

摘要:我们讨论过Entity类,和封装过的Dataset,关于为什么用Entity,一个原因就是希望可以通过编译器来检查我们的一些错误。 前面讲到的代码自动生成工具,实际上只是帮助你完成了一些代码,软件的结构没有改善使用代码自动生成工具,并不符合我们前面提到的原则——让强大的计算机来代替迟钝的你,来做本该由他来做的事情(让正确的人按照正确的方法作正确的事)因为既然可以用代码自动生成工具生成这么多有规律的代码,那么就应该可以将这项功能内嵌的你的代码里使用代码自动生成工具,并不符合我们前面提到的无重复原则和抽象化原则,相同的事情应该通过一个抽象出来的统一的gateway来做 不希望包罗万象,不期望可以处理任何复杂的逻辑 对于xml文件方式和attribute方式,倾向于attribute,不是因为它是新技术,而是因为,我一直希望,代码是可以自描述的,xml之所以这么强大,其中一个因素就是xml是可以自描述的。我们希望代码可以讲述他自己的故事,可以告诉调用者怎么样来使用他 attribute的应用也越来越广泛,比如asp.Net的数据验证,也有一些文章讲attribute对某些传统设计模式的影响,attribute会催生一些新的模式 而且,访问xml或者访问attribute有一个单独的类来实现,其具体实现的改变不影响程序其他部分 将Entity持久化时, 不需要对Entity数据做验证,如果有错误,直接抛出异常,验证的工作交给别的对象来做 对于动态sql和存储过程,不要求统一,什么方便就用什么,简单的,有规律的就用sql,复杂的用view或者存储过程来封装,实际上拼sql访问table和自动生成参数访问存储过程是类似的,存储过程可以也可以看作datasource 效率不是最主要的,一个程序员一个月的工资可以买很多东西,而且清晰的结构使我们容易的找出真正的瓶颈,加以优化 基本原型 DataHelper.SaveEntity(CustomerEntity.GetType(), id)DataHelper.DeleteEntity(CustomerEntity.GetType(), id)DataHelper.UpdateEntity(CustomerEntity.GetType(), id) DataHelper根据BookEntity的Type到xml里面找到Node,也可以通过反射访问CustomerEntity的attribute 可以用动态sql,也可以用存储过程 对于Query的话,可以Qualifications q = new Qualifications()q.add( new Qualification( Query.Like, CustomerEntity.GetType(), customerName ) )CustomerEntitys[] = DataHelper.GetEntityList(CustomerEntity.GetType(), q) 接下来 缓存?把Dataset转化成Entity的数组或者集合 ?讲EntityList绑定到UI Control ?Entity类要承担哪些责任...[阅读全文]

posted @ | Feedback (2) |

摘要:怎么样实现UI和数据的自动绑定呢? 很不希望代码中有很多这样的语句myCustomer.Name = Txt_Name.TextmyCustomer.Type = Ddl_Type.SelectItem.Value Txt_Name.Text = myCustomer.NameSetSelectItem(Ddl_Type.SelectItem.Value,myCustomer.Type) 也很不希望叶面中有几十个数据验证控件 而且,如果改变数据的UI的形式,比如Customer.City 由TextBox改成DropdownList,又或者所有Customer.Active由DropdownList改成CheckBox会带来很多麻烦 或者可以写一个控件,根据Config文件,动态生成Text,CheckBox....等等,添加验证,自动填充数据(主要是list控件,从city的列表中选择一个),设定初始值,通过Value属性访问其值。 但是怎么在叶面一级,将叶面上某一些控件绑定到一个Entity对象呢...[阅读全文]

posted @ | Feedback (1) |

摘要:目的应用于小型的,简单的应用 config文件,不单单是Entity到Table的map,还含有一些其他的信息,用于产生Edit,Query,Delete,Update等叶面 <entity id="customer"> <datasource>tblCustomer</datasource> <name>用户</name> <needquery>y</needquery> <key>CustomerID</key> <fields>  <field id="name">   <fieldname>客户名称</fieldname>   <valuetype>text</valuetype>   <value></value>   <queryable>y</queryable>   <iseditable>y</iseditable>   <displaytype>textbox</displaytype>   <querytype>like</querytype>   <maxlength>50</maxlength>   <isnullable>n</isnullable>   <mustqueryinput>n</mustqueryinput>   <display>y</display>   <checkunique>y</checkunique>   ....  </field>    .... 数据库可以根据config文件自动建立数据库,然后手工做调整 UI和数据的自动绑定 数据,xml格式 UI 根据config文件动态生成myHelper.GetEditHTMLrender("customer") 对于排版有特殊要求的可以单独产生一个filed Node的HTML代码myHelper.GetEditHTMLrender("customer/name") 根据config文件,生成xml格式的数据,利用XMl Island和Html Control绑定, xml数据在通过client验证后(类型,范围等等),通过input type=hidden返回 数据和database的绑定 根据config文件和xml格式的数据动态生成SQL,访问数据库更新数据库之前要做一些额外的验证,比如,检测到会产生重复数据,要给user返回详细的信息如果会产生相关联的操作,比如删除master数据,要求也删除detail数据,使用触发器 Query也是根据config文件动态生成sql,访问数据库 涉及多个表,用View或者存储过程对他们进行封装...[阅读全文]

posted @ | Feedback (0) |