用于应用程序和 Web 设计的三层架构代码生成程序






4.91/5 (9投票s)
应用程序和 Web 设计的定制三层(层)架构
摘要
如今,大多数 Web 和应用程序都是基于这种三层架构编写的。本文首先介绍了这种三层架构,然后介绍了一个以优化和完整方式生成应用程序和 Web 的程序。
引言
该架构由表示层、业务逻辑层和数据访问层三个层组成。但经过一些修改,可以获得一种最优的架构。表示层是指窗体和页面,它们实际上是用户界面(UI)。业务逻辑层包括用于建立数据层与表示层之间关系的函数。数据访问层是指直接与数据库交互的函数。
三层架构
在本文中,通过对这种三层架构的修改,可以获得一种在这些层之间传递数据的单元,并且与三层架构完全类似。以下是对该架构不同部分的解释。
解释
第一层(表示层):这一层包括窗体和页面。
第二层:这一层由用于建立关系的函数组成。它们包括
Insert
函数:此函数将新实体添加到表中。此函数的输入是一个接口对象,输出是一个数字(Integer
),表示该函数是否成功运行。Getlist
:此函数没有输入,其输出是表中所有行的列表。Update
:此函数用于编辑实体。此函数的输入是一个接口对象,输出是一个数字(Integer
),表示该函数是否成功运行。Delete
:此函数用于从表中删除实体。其输入是一个接口对象,输出是一个数字(Integer
),表示该函数是否成功运行。Details
:此函数可用于查找实体。其输入是一个接口对象,输出是一个只包含一行数据的表。DetailsByField
:此函数的输入是其中一个字段的名称及其值。其输出是表中所有字段值等于请求值的行。
接口对象:Interface
对象是一个包含表中所有字段的类。Interface
对象是用于在层之间传输数据的单元。当执行某个操作(insert
、update
、delete
)时,会从此接口类创建一个对象,并将其属性值赋给业务逻辑层。但是,当需要获取列表(调用getlist
函数)时,则无需创建此接口类的对象。此外,还可以直接调用业务逻辑层的getlist
函数。将接口(interface
对象)与业务逻辑层分开,可以使业务逻辑层更轻量级,并且创建对象更快,因为大型类是一种反模式。
第三层:这一层由数据类和父数据类组成。
- Data(数据):此类打开接口对象并为父数据类设置属性。
Data
类继承父数据类。 - Parent data(父数据):此类通过执行数据库过程来执行其操作。
代码生成程序
此程序为每个表创建 SqlServer 存储过程,例如insert
、update
、delete
、get list,并以优化的方式生成 Web (ASP.NET) 和应用程序的 C# 代码。开发人员只需要设计 UI(用户界面),然后将一系列生成的类添加到他的程序中(通过拖放)。那些从事重复性工作的公司和开发人员实际上是在浪费客户的时间和金钱。此程序可生成所有必需的代码。
如何使用代码生成程序
为了让代码生成程序知道delete
、update
和search
函数的基础是什么,所有表都必须有主键,否则,代码生成程序将无法识别在 SqlServer 的where
命令后面应该写哪个字段。
方法
运行HeiltonGenerator.exe文件并连接到 SqlServer 数据库后,将显示一个表列表。然后,开发人员必须选择表,转到设置选项卡,选择路径,然后单击生成。
连接字符串选项卡
在此选项卡中,有一个用于创建SqlConnection
的类,其中有一个布尔类型的变量 State
,用于检查SqlConnection
的打开或关闭状态。将此类分离有助于管理连接字符串。
using System;
using System.Data.SqlClient;
public class SqlCon
{
Private String StrCon;
Private Boolean State;
Private SqlConnection Con;
Public SqlConnection OpenCon()
{
if (!State)
{
StrCon ="Connection String";
Con = new SqlConnection(StrCon);
Con.Open();
State=!State;
}
return Con;
}
Public void CloseCon()
{
if (State)
{
Con.Close();
State=!State;
}
}
}
设置选项卡
在此选项卡中,选择输出文件夹的名称和生成代码的方向,然后选择项目类型(Web 或应用程序)。之后,需要单击生成。当显示“成功生成代码”的消息时,用户可以退出程序。在输出文件夹中会创建两个文件夹,包括Sql和Code。Sql文件夹包含一个名为StoredProcedures.sql的文件,其中生成了 SqlServer 存储过程查询。应在 SqlServer 环境中打开并执行这些查询,以创建存储过程。现在,开发人员需要转到 Microsoft Visual Studio,并将 Code 文件夹拖到解决方案资源管理器中。
在此阶段,类已添加到程序中,并可供使用。
对于每个表,都在每个层中单独创建一个类。这些类的命名方式如下
例如,有一个名为Tblperson
的表,其命名方式如下
InterfaceTblperson
BusinessTblperson
DataTblperson
ParentDataTblperson
Layer (class) name+ Table name
换句话说,层名 + 表名
SqlServer 中存储过程的命名方式如下
spInsertTblperson
spUpdateTblperson
spDeleteTblperson
spDetailsTblperson
spGetListTblperson
spDetailsByFieldTblperson
sp+Action+TableName
sp
代表存储过程。
本文附带了一个程序及其所有操作。
还有一个名为Tblperson
的表,具有以下字段
要显示此表的所有行,需要编写以下代码.
privatevoid Form1_Load(object sender, EventArgs e)
{
BusinessTblperson BTblperson = new BusinessTblperson();
dataGridView1.DataSource = BTblperson.GetList();
}
要向 Tblperson 表添加一个实体(行),必须编写以下代码。
- ID 字段是 SqlServer 中的标识规范。因此,无需为其添加值。
InterfaceTblperson ITblperson = new InterfaceTblperson();
ITblperson.Name = textName.Text;
ITblperson.LastName = textLastName.Text;
BusinessTblperson BTblperson = new BusinessTblperson();
Int Ireturn=BTblperson.Insert(ITblperson);
if (Ireturn == 0)
{
MessageBox.Show("Insert Failed ");
}
else
{
MessageBox.Show("Insert is successful");
}
要从 Tblperson 表删除一个实体(行),应编写以下代码。
- ID 字段是 SqlServer 中的标识规范。因此,只需要为此 ID 字段赋值。
InterfaceTblperson ITblperson = newInterfaceTblperson();
ITblperson.ID = int.Parse(textID.Text);
BusinessTblperson BTblperson = new BusinessTblperson();
Int Ireturn=BTblperson.Delete(ITblperson);
if (Ireturn == 0)
{
MessageBox.Show("Delete Failed ");
}
else
{
MessageBox.Show("Delete is successful");
}
要更新 Tblperson 表中的一个实体(行),必须编写以下代码。
所有字段都应赋值。
InterfaceTblperson ITblperson = new InterfaceTblperson();
ITblperson.ID = int.Parse(textID.Text);
ITblperson.Name = textName.Text;
ITblperson.LastName = textLastName.Text;
BusinessTblperson BTblperson = new BusinessTblperson();
Int Ireturn=BTblperson.Update(ITblperson);
if (Ireturn == 0)
{
MessageBox.Show("Update Failed");
}
else
{
MessageBox.Show("Update is successful");
}
要从Tblperson
表中查找一个实体(行),必须编写以下代码。
- 只需要为主键字段赋值。
InterfaceTblperson ITblperson = new InterfaceTblperson();
ITblperson.ID = int.Parse(textID.Text);
BusinessTblperson BTblperson = new BusinessTblperson();
DataTable DTable=BTblperson.Details(ITblperson);
if (DTable.Rows.Count == 0)
{
MessageBox.Show("No Find");
}
else
{
textName.Text = DTable.Rows[0].Field<string>("Name");
textLastName.Text = DTable.Rows[0].Field<string>("LastName");
}
下面是窗体的一个视图