EngineeringData深入剖析-结构篇
1. EngineeringData介绍
EngineeringData是针对工程建设过程的不同阶段所形成的工程资料或文件的编制、收集、整理等管理定制研发的软件产品,完全符合国家《建筑工程质量质量验收统一标准(GB50300-2002)》和各省市《建筑工程统一用表》要求。
2. 结构分析
2.1. 表示层
表示层为客户端提供对应用程序的访问。这一层是由CnToSoft. EngineeringData.sln 解决方案文件中的 Windows窗体应用程序项目实现的。表示层由 Windows窗体和代码隐藏文件组成。Windows窗体只是提供用户操作及界面排版,而代码隐藏文件实现各种控件的事件处理。
2.2. 数据接口层
数据接口层为表示层定义了一系列属性、方法和事件。这一层是由 CnToSoft. EngineeringData.sln 解决方案文件中的 CnToSoft.EngineeringData.IDal项目实现的。
2.3. 数据层
数据访问层为表示层不仅提供数据服务,以及各种业务规则和逻辑的实现。这一层是由 CnToSoft. EngineeringData.sln 解决方案文件中的 CnToSoft.EngineeringData.Dal项目实现的。
3. 设计思想
参考Martin Fowler的Domain Model中,我们可以清楚的把4个类分成三层架构来设计我们的系统。
1、 实体类层,在这里我们用DataSet来代替。
2、 DAO层,即数据操作的接口及实现类。
3、 业务逻辑层,即向表示层提供统一的服务调用。
因考虑到典型的EngineeringData这个项目,简单的CRUD操作占据了业务逻辑的绝大多数比例,因此把业务逻辑层合并到DAO层。这样做的优点是:避免了业务逻辑不得不大量封装DAO接口的问题,简化了软件架构设计,节省了大量的业务层代码量。这种方案的缺点是:把DAO接口方法和业务逻辑方法混合到了一起,显得职责不够单一化,软件分层结构不够清晰;
以下是EngineeringData的结构关系图:
4. 代码示例
表示层调用数据层
TreeNode node = treeView1.SelectedNode;
IEngineering engineeringDal = new EngineeringDal();
engineeringDal.RestoreRecycleNode(node.Name);
数据层接口定义
void RestoreRecycleNode(string nodeId);
数据层实现
public void RestoreRecycleNode(string nodeId)
{
Database db = DatabaseFactory.CreateDatabase();
using (DbConnection connection = db.CreateConnection())
{
try
{
connection.Open();
using (DbTransaction transaction = connection.BeginTransaction())
{
try
{
RestoreRecycleNode(nodeId, db, transaction);
transaction.Commit();
}
catch
{
transaction.Rollback();
throw;
}
}
}
finally
{
connection.Close();
}
}
}