LayerGenMMX
轻松创建业务和数据层!
注意
Layergen 3.5 已发布!本文档已作废。请在此处查找新文档: Layergen 3.5
引言
LayerGen MMX 是我设计的一个项目,用于自动化和简化业务层和数据层的创建。它已经开发了很长时间,自 2001 年以来一直在进行中,现在终于达到了一个我引以为豪的阶段,可以将其呈现给大家。LayerGen 的目标之一是使其简单,并且不增加大量复杂的代码和开销。许多辛勤的劳动都投入到了这个产品的创建中,希望它能成为一个对大家都有用的工具。
背景
对于不熟悉业务/数据层模型的各位,我将在此尝试给出一个简化的解释。今天创建的大多数应用程序(包括 Winform 和 Web 应用程序)都有某种数据库后端来存储信息。LayerGen MMX 设计用于支持 Microsoft SQL Server(从 2000 及更高版本)和 Microsoft Access(从 2000 及更高版本,尽管目前不支持 2007 原生版本的 Access)。
您的应用程序可以通过多种方式与您的数据库通信。然而,最被接受和有效的方式之一是使用分层(有时称为三层编程)。三层编程是一种将代码划分为 3 个层(或称为“层”)的编程风格。最底层称为数据层。数据层的职责是直接与数据库通信。它如何通信对其他两个层无关紧要。虽然 Layergen MMX 在所有数据库通信中使用 ADO.NET,但您也可以技术上使用任何您想要的方法。第二层称为业务层。这一层的任务是与数据层通信以检索和存储数据。此外,它还应用您可能拥有的任何业务规则。业务规则可以是数据在呈现给第三层,也就是我们的 UI 层之前进行的任何类型的数据操作。UI 层负责您的应用程序用户将看到的内容。
Using the Code
运行 LayerGen MMX 时,将弹出主屏幕。我将逐一介绍 LayerGen MMX 中的每个选项。“语言选项”面板中的第一个下拉列表是语言。LayerGen MMX 可以生成 C# 或 VB.NET 代码。为了保持一致,您可能需要选择您的应用程序将用什么语言编写。
在该下拉列表下方是另一个下拉列表,您可以在其中选择要定位的 .NET 版本。Layergen 可以为从 1.1 到 4.0 的任何 .NET 版本创建兼容的代码。如果您选择 .NET Framework 的 2.0 或更高版本,Layergen MMX 将创建部分类,以便您可以添加自己的功能到生成的类中,而无需编辑生成的 LayerGen MMX 源文件。同样,如果您选择 3.5 或更高版本,LayerGen MMX 将生成对 LINQ 友好的类(稍后会显示一个示例)。
在该下拉列表下方是 3 个复选框。通过选择“抑制所有注释”框,LayerGen 将不会在代码中生成任何注释。取消选中此框将在源代码和数据库存储过程中插入注释。通过选择“加密文本字段”框,LayerGen MMX 将加密存储所有文本字段。例如,这对于存储密码或信用卡信息的表可能很有用。请注意,加密文本通常比普通文本长,因此如果您启用此选项,请确保在数据库中分配足够的长度以弥补。
“语言选项”面板中的最后一个复选框需要稍作解释。通常在数据库设计中,您会有许多与其他表相关的表。因此,从数据库中删除记录可能会导致错误,如果该表的主键与另一个表的外键相关。通常,删除表中行的应用程序不会真正“删除”行。相反,应用程序会将该行标记为已删除,方法是将表中的一个布尔值或位值设置为已删除或无效。如果您选中此选项,将出现一个文本框,要求输入一个字段名。此字段名应为位或布尔字段名。当遇到包含此字段名的表的任何情况时,LayerGen MMX 将在代码中生成一个特殊的 Delete()
函数,该函数会将此字段设置为 true
,从而“删除”它。该行仍然保留在数据库中,但是 LayerGen MMX 将不会通过其 GetAll()
方法检索它。
“数据库选项”面板下方是一个下拉列表,其中填充了 LayerGen MMX 可以支持的所有可用插件。LayerGen MMX 附带 2 个插件,一个用于 SQL Server,一个用于 Microsoft Access。根据选择的插件,会出现不同的选项。如果您选择 Microsoft Access 插件,则必须浏览并找到 .MDB 文件。如果您选择 SQL Server 插件,则必须指定包含 SQL Server 的服务器名称。此外,您可以选择是使用 SQL Server 身份验证(在这种情况下,您必须指定用户名和密码),还是使用 Windows 身份验证。另外,您必须输入要为其创建层的数据库的名称。最后一个选项是一个复选框,上面写着“自动插入存储过程”。如果选中此项,LayerGen MMX 将自动创建或更新所需的存储过程并将其插入数据库。如果未选中,则必须手动插入存储过程。LayerGen MMX 将创建一个包含所有必要存储过程的“Procedures.SQL”文件。
最后一个面板是“LayerGen 选项”。在此面板中,您必须指定一个输出目录。LayerGen MMX 将在此目录中放置所有生成的代码。还有一个选项可以选择是覆盖还是追加到任何现有文件。您几乎总是希望覆盖。最后,还有一个复选框写着“加密连接字符串”。如果选中此项,数据库连接字符串将被加密。这对于 Web 应用程序特别有用,但应仅在必要时使用。
设置好所有选项后,请单击“创建层”按钮。Layergen MMX 将弹出一个对话框,其中包含您数据库的所有表和视图(不包括系统对象)。在您希望 LayerGen MMX 创建代码的每个表旁边打上勾。此外,您可以通过按下“全选”按钮来选择所有表,或通过按下“取消全选”按钮来取消选择所有表。单击“确定”按钮,LayerGen MMX 将开始工作。请耐心等待,根据您的数据库是本地还是远程,LayerGen MMX 完成可能需要几秒钟。完成后,LayerGen 将弹出一个对话框报告其成功。
就这样!导航到您指定的输出目录,您应该能看到您的所有文件!
使用新生成的代码
如果您定位的是 .NET 1.1,则您选择的每个表将有 2 个文件。如果您定位的是 .NET 2.0 或更高版本,则每个表将有 4 个文件。除了这些文件之外,还将有两个其他文件,名为“Universal.VB”或“Universal.CS”以及“Interfaces.VB”或“Interfaces.CS”。“Interfaces”文件包含一些内部使用的接口定义。“Universal”文件包含一个 static
(或共享)函数,该函数返回数据库连接字符串。您可以随意修改此文件。您会发现一些关于如何从 Web.config 文件中拉取连接字符串的注释,如果您正在创建 ASP.NET Web 应用程序。
要使此代码在您的应用程序中工作,您需要将现有代码添加到您的项目,或者创建一个新的类项目并将文件添加到其中(请务必在您的应用程序中引用新的类项目)。
为了本次演示的目的,我将假定您有一个名为 Addresses
的数据库,其中包含以下 2 个表:<Address>
和 <State>
。address 表有一个名为“StateID
”的外键,它与 State 表连接。两个表都有自动编号主键(或标识)。在对这两个表运行 LayerGen MMX 并将代码添加到您的应用程序后,您可以像这样访问这些表
在C#中
BusinessLayer.State State = new BusinessLayer.State();
BusinessLayer.Address Address = New BusinessLayer.Address();
State.ShortName = "CA";
State.LongName = "California";
State.Save();
Address.FirstName = "Bill";
Address.LastName = "Murray";
Address.StateID = State.StateID;
Address.Save();
在 VB.NET 中
Dim State As New BusinessLayer.State();
Dim Address As New BusinessLayer.Address();
State.ShortName = "CA"
State.LongName = "California"
State.Save()
Address.FirstName = "Bill";
Address.LastName = "Murray";
Address.StateID = State.StateID;
Address.Save();
这将会做的是,首先创建一个新的 State
对象。如果您不为构造函数指定主键值,则它假定为一个新记录。我们将 ShortName
字段设置为“CA
”,将 LongName
字段设置为“California
”。然后我们运行 Save()
方法,该方法将更改提交到数据库(在这种情况下,它将在数据库中添加一个新行)。我们对创建新的地址记录执行相同的操作。请注意,我们正在将 StateID
字段(我们的外键)设置为我们的 State
对象的 StateID
值。当我们执行 State
对象的 Save()
方法时,它会自动填充 StateID
,将其设置为 SQL Server 用作我们主键的标识值。要从数据库中读回此信息,您将使用类似这样的代码
在C#中
BusinessLayer.State State = new BusinessLayer.State(1);
BusinessLayer.Address Address = new BusinessLayer.Address(1);
在 VB.NET 中
Dim State As New BusinessLayer.State(1)
Dim Address As New BusinessLayer.Address(1)
我们在构造函数中传递的“1”是我们主键的值。LayerGen 还为我们的每个表创建一个集合类。该集合类是强类型的,用于存储我们表中多个行或对象。如果您使用的是 .NET 3.5 或更高版本,您也可以使用 LINQ 在集合类上执行查询。
还有一点需要注意的是,表中任何外键都可以通过名为 F<ForeignKeyName>
的特殊属性进行访问。这将创建一个新的主键对象,并允许无缝访问。例如,要扩展上面的示例,您也可以这样做
在C#中
BusinessLayer.Address Address = new BusinessLayer.Address(1);
MessageBox.Show("Bill Murray lives in " + Address.FState.LongName);
在 VB.NET 中
Dim Address As BusinessLayer.Address(1)
MessageBox.Show("Bill Murray lives in " + Address.FState.LongName);
错误和陷阱
使用 LayerGen MMX 有一个重要规则。您的表必须有一个主键。主键的类型或是否为自动编号并不重要,但它必须存在。唯一的例外是视图。LayerGen MMX 中的视图被创建为只读对象(因此没有 Save()
方法或 Delete()
方法)。这是有道理的,因为您无法从视图添加或删除行。这是程序中唯一已知的限制/错误。
联系或帮助
我正在创建用户手册,但尚未完成。我在本文档的顶部将其作为下载附件。如果您需要更多帮助,请随时通过 icemanind@yahoo.com 与我联系,或在此处留下评论,如果您需要任何帮助或有任何错误需要报告!
历史
- 2010 年 1 月 4 日:首次发布