• (实践篇)剖析最近项目使用的一个框架


    本篇用到的纯理论知识在此,大抵是引用一些网友的博文:

    http://www.cnblogs.com/jangwewe/archive/2013/03/22/2975012.html,理论过后,来看实战

    前段时间完成了一个项目,照例过段时间应该总结一下,这里补上,

    主要是关于系统架构的总结,这里记下作为以后参考:

    1 先来看下系统的总体架构,如图

    --------------------------------------

    2 各层简要介绍:

    bll:逻辑层

    commonUtil 通用方法层(如处理字符串,excel导入到处,序列化等方法)

    dal 数据层 

    dbUtil层(主要是封装了访问数据库的一些操作)

    dll  包含项目中引用的各种dll

    entity 实体层,对应数据库中的每一张表

    iterface 接口层,又分为ibll逻辑层接口,和idal数据层接口

    web 展示层

    -----------------------------------------

    3 各层之间的引用关系:

    web层,引用所有层

    interface层,引用commonUtil,dbUtil,entity层

    bll层,引用commonUtil,dbUtil,entity,dal,interface层

    dal层,引用commonUtil,dbUtil,entity,interface层

    ------------------------------------------

    4 以一个小例子来看各层展开之后,如图:

    页面调用如下:

    5 看完这个调用,估计你已经想到了,这里使用的是IOC依赖注入的方式来实现调用,

    那么它又是怎么实现的呢,如下:

    (1)首先在web.config里新增配置节:

     <configSections>
        <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration, Version=1.2.0.0, Culture=neutral, PublicKeyToken=4c5a798e9f2ad114"/>
      </configSections>
    <unity configSource="Setting\Unity.config"   />

    Unity.config是一个标准的xml文件,内容如下图:

    (2)commonUitl里新增容器处理类:

     
    public class UnityContainerAccessor
        {
     
            private static IUnityContainer logicUnityContainer = null;
            /// <summary>
            /// 获取逻辑层IoC容器
            /// </summary>
            public static IUnityContainer  LogicContainer
            {
                get
                {
                    if (logicUnityContainer == null)
                    {
     
                        IUnityContainer container = new UnityContainer();
                        UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
                        section.Containers["LogicContainer"].Configure(container);
                        logicUnityContainer = container;
                    }
                    return logicUnityContainer;
                }
            }
     
     
            private static IUnityContainer daoUnityContainer = null;
            /// <summary>
            /// 获取DAO层IoC容器
            /// </summary>
            public static IUnityContainer DaoContainer
            {
                get
                {
                    if (daoUnityContainer == null)
                    {
     
                        IUnityContainer container = new UnityContainer();
                        UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
                        section.Containers["DaoContainer"].Configure(container);
                        daoUnityContainer = container;
                    }
                    return daoUnityContainer;
                }
            }
     
     
        }


    (3)bll层里实现如下,实例如下:
    public class ExampleMethodBLL:MyStructOne.INTERFACE.BLL.IExampleBLL
        {
            private MyStructOne.INTERFACE.DAL.IExampleDAL  _DAL = null;
            private Database _dataBase;
     
     
            public Database dataBase
            {
                get { return _dataBase; }
                set
                {
                    _dataBase = value;
                    _DAL.dataBase = value;
                }
            }
     
     
            public ExampleMethodBLL()
            {
                _DAL = UnityContainerAccessor.DaoContainer.Resolve<MyStructOne.INTERFACE.DAL.IExampleDAL>();
                dataBase = DatabaseFactory.CreateDatabase(System.Configuration.ConfigurationManager.ConnectionStrings["ExampleConnectionKey"].ConnectionString);
                           
            }
     
           public DataTable ExampleMethod()
            {
                return _DAL.ExampleMethod();
            }
        }
    
    
     (4)dal层里则是具体的数据操作和实现:
     
    class ExampleMethodDAL:MyStructOne.INTERFACE.DAL.IExampleDAL
        {
           private Database _dataBase;
     
     
            public Database dataBase
            {
                get { return _dataBase; }
                set
                {
                    _dataBase = value;
                    _dataBase = value;
                }
            }
     
     
            public ExampleMethodDAL()
            {
                
            }
     
             public DataTable ExampleMethod()
            {
                string strSql = @"select top(10) * from UM_MENU";
                 return dataBase.ExecuteDataTable(strSql);
            }
     
        }


    以上是抽取项目中的架构做的一个示例,留作参考之用!
  • 相关阅读:
    BZOJ_3174_[Tjoi2013]拯救小矮人_贪心+DP
    BZOJ_1334_[Baltic2008]Elect_DP+语文题
    BZOJ_1858_[Scoi2010]序列操作_线段树
    BZOJ_1369_[Baltic2003]Gem_树形DP
    BZOJ_1705_[Usaco2007 Nov]Telephone Wire 架设电话线_DP
    BZOJ_2223_[Coci 2009]PATULJCI_主席树
    BZOJ_1800_[Ahoi2009]fly 飞行棋_乱搞
    BZOJ_1878_[SDOI2009]HH的项链_莫队
    Struts2自定义过滤器的小例子-入门篇
    JAVA程序员常用软件整理
  • 原文地址:https://www.cnblogs.com/jangwewe/p/2993871.html
Copyright © 2020-2023  润新知