使用变形代码来减少样板

时间:2010-08-05 20:31:39

标签: metaprogramming polymorphism boilerplate javaagents

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

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

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

我实习生在公司的某个人从我们的SqlCommand类(继承自System one)编写了一个非常棒的方法,它使用.NET反射和System.Reflection.Emit来生成一个设置字段的方法(在具有nullary构造函数的任何模型对象上使用包含列名称的属性修饰。我会考虑这种变形,因为程序的特定部分会编写新方法。

这种从数据库生成对象的模式只是一个例子。我两天前遇到的一个是对SWT的数据绑定支持(通过JFace)。我使用setAddress(地址)和getName()制作了这些非常干净的模型,现在我必须使用PropertyChangeSupport fire-ers污染setter并携带一个PropertyChangeSupport实例(即使它只是在一个抽象基类中)!然后我找到了PojoBindables,现在我感觉自己像80级数据仓,只是因为我需要少写。

具体而言,使用本机代码或类似Java Agent之类的东西会非常甜蜜。

1 个答案:

答案 0 :(得分:0)

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

相关问题