菩提树的Framework架构

.net 架构,数据库设计,编码规范

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

再谈三层架构----老生常谈

1       三层架构

1.1   架构图

Ø  实体类模块——一组实体类的集合,负责整个系统中数据的封装及传递。

Ø  数据访问层接口族——一组接口的集合,表示数据访问层的接口。

Ø  业务逻辑层接口族——一组接口的集合,表示业务逻辑层的接口。

Ø  数据访问层模块——一组类的集合,完成数据访问层的具体功能,实现数据访问层接口族。

Ø  业务逻辑层模块——一组类的集合,完成业务逻辑层的具体功能,实现业务逻辑层接口族。

Ø  表示层模块——程序及可视元素的集合,负责完成表示层的具体功能。

Ø   IoC容器模块——负责依赖注入的实现。

Ø  辅助类模块——完成全局辅助性功能。

使用反射,每个层只需要一个工厂,然后通过从配置文件中读出程序集的名称,动态加载相应类。另外,为了提高依赖注入机制的效率,这里引入缓存机制。下面来看具体实现。

     
配置
      首先,需要在Web工程的Web.config文件的<appSettings>节点下添加如下两个项:
     
<add key="DAL" value=""/>
      <add key="BLL" value=""/>
     
这两个配置选项分别存储要应用的数据访问和也业务逻辑层的程序集名称。value目前是空,是因为目前还没有各个层次的具体实现。

1.2   实例

1.2.1   DAC

1.2.1.1         DAC接口

1.2.1.1.1       IACL_FUNCTION

 

public interface IACL_FUNCTION

    {

        #region  成员方法

        /// <summary>

        /// 增加一条数据

        /// </summary>

        bool Add(STC.Task.Model.ACL_FUNCTION model);

        /// <summary>

        /// 更新一条数据

        /// </summary>

        bool Update(STC.Task.Model.ACL_FUNCTION model);

        /// <summary>

        /// 删除一条数据

        /// </summary>

        bool Delete(string ID);

        /// <summary>

        /// 得到一个对象实体

        /// </summary>

        STC.Task.Model.ACL_FUNCTION GetModel(int ID);

        /// <summary>

        /// 获得数据列表

        /// </summary>

        //DataSet GetList(string strWhere);

        /// <summary>

        /// 根据分页获得数据列表

        /// </summary>

        //         DataSet GetList(int PageSize,int PageIndex,string strWhere);

        #endregion  成员方法

}

1.2.1.1.2       IBaseDataHelper

 

/// <summary>

    /// 公用数据接口主要用于查询,事务等复杂的数据操作

    /// </summary>

    public interface IBaseDataHelper

    {

        /// <summary>

        /// 通过SQL语句返回DataSet

        /// </summary>

        /// <param name="strSql">传入的SQL语句</param>

        /// <returns></returns>

        DataSet BaseQuery(string strSql);

        /// <summary>

        /// SQL语句执行

        /// </summary>

        /// <param name="strSql">传入的SQL语句</param>

        /// <returns>影响的行数</returns>

        int ExecuteSql(string strSql);

       /// <summary>

       /// 执行事务

       /// </summary>

       /// <param name="SQLStringList">传入的SQL语句数组</param>

       /// <returns>是否成功</returns>

        bool ExecuteSqlTran(ArrayList SQLStringList);

        /// <summary>

        /// 执行事务

        /// </summary>

        /// <param name="SQLStringList">传入的SQL语句HashTable</param>

        /// <returns>是否成功</returns>

        bool ExecuteSqlTran(Hashtable SQLStringList);

        /// <summary>

        /// 通过SQL语句得到单个数据

        /// </summary>

        /// <param name="strSql">传入的SQL语句</param>

        /// <returns>数据对象</returns>

        object GetSingle(string strSql);

    }

1.2.2   BLL层:

1.2.2.1         业务对外接口IBLL

   public interface ITaskManagerBLL

    {

    /// <summary>

        /// 撤单

        /// </summary>

        /// <param name="TaskNum">任务编号</param>

        /// <param name="Status">操作状态</param>

        /// <returns></returns>

        bool OperationCommonTask(string TaskNum,string Status);

}

1.2.2.2         业务实现BLL

public class TaskManagerBLL : ITaskManagerBLL

    {

   #region 撤单

 

        /// <summary>

        /// 撤单

        /// </summary>

        /// <param name="TaskNum"></param>

        /// <param name="Status"></param>

        /// <returns></returns>

        public bool OperationCommonTask(string TaskNum, string Status)

        {

            string strSql = "update JYSC_RWGL_SCRWJL set status='" + Status + "' where rwdbh='" + TaskNum + "'";

            int iCount = OracleDALFactory.DataAccess.CreateBaseDataHelper().ExecuteSql(strSql);

            if(iCount>0)

            {

                return true;

            }

            else

            {

                return false;

            }

        }

 

        #endregion

}

1.2.3   界面调用

protected void btnWithdrawSubmit_Click(object sender, EventArgs e)

    {

        BLLAccess.CreateTaskManagerBLL().OperationCommonTask(RWDBH.Value,BLLConfig.WithDrawTaskStatus );

        Response.Write("<script>alert('您撤单成功')</script>");

        Response.Redirect("../TaskOperate/WithdrawTask.aspx", true);

    }

 

 

 

posted on   菩提树下  阅读(853)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示