2010-08-05 81 views
2

有没有人看过变态代码 - 也就是说,生成并运行指令(包括IL和Java字节代码,以及本机代码)的代码 - 用于减少样板代码?使用变形代码减少样板

无论应用程序或语言如何,通常都会有一些数据库代码从数据库中获取行并返回对象列表。当然,根据你的数据库连接器,有无数种方法可以做到这一点。您可能最终通过索引访问行的单元格(这很尴尬,因为将“SELECT Name,Age”更改为“SELECT Age,Name”会破坏您的代码,再加上索引混淆含义)或使用myObject.Age = resultRow。 getValue(“年龄”)(很尴尬,因为这涉及简单地通过每个字段来根据列设置其数据)。

保持与数据库主题,LINQ to SQL是真棒。但是,定义数据模型并不太好,特别是当数据库有很多表,SSMS无法在对象浏览器中列出所有表时。另外,这不是我不喜欢的存储过程写入或SQL参与;只是将对象连接到数据库。

有人在我的实习生从我们的SqlCommand类(它继承自System系统)使用.NET反射与System.Reflection.Emit生成一个方法来设置字段(使用包含列名称的属性进行装饰)在具有无限构造函数的任何模型对象上。我会考虑这个变形,因为该程序的特定部分写入新的方法。

这种从数据库生成对象的模式只是一个例子。两天前我遇到的一件事是通过数据绑定支持SWT(通过JFace)。我用setAddress(Address address)和getName()创建了这些完全干净的模型,现在我必须使用PropertyChangeSupport消息传递器来污染setter,并携带一个PropertyChangeSupport实例(即使它只是抽象基类)!然后我发现PojoBindables,现在我感觉像一个80级的数据绑定,只是因为我需要写少。

具体来说,使用类似这样的东西或Java Agent的本机代码的东西真的很好。

回答

0

泛型编程可能会成为你的胡同。 Concept C++ website有一个非常好的教程,涵盖抽象和提升,可用于任何语言的想法,并将样板代码转化为积极的力量。通过检查几乎完全相同的一系列样板方法,您可以推导出一组要求,从概念上统一代码(“为了使X发生,必须执行Y,因此使X1发生,必须使用差异1来执行Y”)。 。从那里您可以使用模板来捕捉共同点,并使用模板输入来指定差异。 C#和Java在这一点上都有自己的泛型实现,所以值得一试。