Business Objects和动态sql

时间:2012-01-27 02:55:39

标签: .net sql dynamic-sql business-objects

我有这个想法,并且在得到它之后我的第一反应是“这是一个好主意,但为什么我以前从未见过/听过它?”所以我希望你能告诉我是否有一些框架可以做到这一点,或者是否有一些理由我应该避免它。

我们的想法是使用方法创建一个基本业务对象类,以根据派生类的名称及其属性(或属性中指定的别名)动态编写CRUD sql查询。

我的想法是,一旦我这样做,我就可以像这样创建一个新类:

class Customer: BusinessObjectBase
{
    int Id {get;set;}
    string Name {get;set;}
    string Phone {get;set;}
}

我的Customer类可以访问BusinessObjectBase的CRUD方法。

在回答这个问题时要记住的事情:为了这个问题,我对减少开发时间和低维护的设计目标非常感兴趣,安全性在1到10的范围内大约为3。换句话说,我没有兴趣听到答案,告诉我应该使用存储过程来访问数据,因为它们更安全,或者沿着这些方向做任何事情。

我知道当涉及到过于广泛的问题时,这里的用户非常自由,但是为了安全起见,让我重申一个不太宽泛的问题:

是否有任何现有的框架可以做到这一点,还是有任何令人信服的理由我不应该这样做?

1 个答案:

答案 0 :(得分:4)

以前做过;很多次,很多方面。您思考的基本概念被称为“模型优先”发展。您可以先在Entity Framework,NHibernate,Subsonic和许多其他ORM样式框架中进行建模。这种思路的另一个体现是LINQ-to-SQL,其中LINQ知道要生成什么查询,无论你是否有CRUD存储过程。

在ORM成为主流之前,我们使用代码文件(目前在T4样式模板中编写代码)来写出你所描述的内容。整个想法基于'约定',这意味着如果一个字段被命名为ID,那么它必须是clustered-PK等等。

<强>声明

话虽如此,但这种想法存在不利因素。在您典型的Web应用程序中(或在此处插入您的应用程序样式),您可以使用三个层 - 客户端,中间和数据库。使用模型/代码优先开发,您实际上忽略了三个层中的一个。现代硬件已经足够快,你可以为大多数网站做到这一点。当您的网站数量增长时但是,复杂性,您经常会发现自己正在为最复杂/经常使用的场景设置自动crud设置。

无论如何,希望有所帮助。