我在一家仅使用存储过程进行所有数据访问的公司工作,这使我们的本地数据库保持同步非常烦人,因为每次提交都必须运行新的proc。过去,我曾经使用过一些基本的ORM,但是我发现使用它的经验要好得多,更干净。我想向开发经理和团队中的其他成员建议我们考虑使用某种ORM进行未来开发(团队中的其他成员仅熟悉存储过程,而从未使用过其他东西)。当前的体系结构是.NET 3.5,类似于.NET 1.1,具有“神类”,它们使用ActiveRecord的奇怪实现并返回在代码隐藏文件中循环的未类型化数据集-这些类的工作方式如下:
class Foo {
public bool LoadFoo() {
bool blnResult = false;
if (this.FooID == 0) {
throw new Exception("FooID must be set before calling this method.");
}
DataSet ds = // ... call to Sproc
if (ds.Tables[0].Rows.Count > 0) {
foo.FooName = ds.Tables[0].Rows[0]["FooName"].ToString();
// other properties set
blnResult = true;
}
return blnResult;
}
}
// Consumer
Foo foo = new Foo();
foo.FooID = 1234;
foo.LoadFoo();
// do stuff with foo...
几乎没有任何设计模式的应用。根本没有任何测试(其他人都不知道如何编写单元测试,并且通过手动加载网站并四处浏览来完成测试)。查看我们的数据库,我们有:199个表,13个视图,多达926个存储过程和93个函数。大约有30个左右的表用于批处理作业或外部物品,其余的用于我们的核心应用程序。
在这种情况下,甚至值得采用其他方法吗?我说的是向前发展,因为“因为它可以工作”,所以我们不允许重构现有代码,因此我们不能更改现有类以使用ORM,但是我不知道我们多久添加一次全新的模块添加/修复当前模块的过程,因此我不确定ORM是否是正确的方法(对存储过程和数据集的投入过多)。如果是正确的选择,我该如何提出使用它的理由?我想到的唯一好处就是拥有更简洁的代码(尽管可能不是,因为当前的体系结构不是 考虑到ORM的构建,因此我们基本上是将ORM移植到将来的模块上,但旧模块仍将使用DataSet),而不必记住已经运行了哪些过程脚本以及需要运行哪些过程脚本,等等,仅此而已,我不知道这样的论点有多么令人信服。可维护性是另一个问题,但除了我以外,似乎没有人关心。