2

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

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

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

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

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

具体来说,使用本机代码和类似这样的东西或Java 代理的东西会非常好。

4

1 回答 1

0

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

于 2010-08-07T12:59:56.657 回答