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 FowlerDomain 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();

        }

    }

}

 

posted @ 2011-10-17 21:46  至软  阅读(728)  评论(0编辑  收藏  举报