有没有人见过变质代码——即生成和运行指令的代码(包括 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 代理的东西会非常好。