zoukankan      html  css  js  c++  java
  • .net企业级架构实战框架综述 天高地厚

    http://www.cnblogs.com/GoodHelper/category/215413.html  
    开源框架完美组合之Spring.NET + NHibernate + ASP.NET MVC + jQuery + easyUI 中英文双语言小型企业网站Demo

    spring.net是java下大名鼎鼎的spring框架移植到.net的开源项目,且借助于.net强大的反射机制,甚至拥有比原java版本更强大的功能。

    那它能用来做什么呢?核心功能就是IOC和AOP:

    IOC(Inversion of Control),字面意思为“反转控制”,我更倾向于理解为“依赖注入”,意思就是说:在基于接口开发的情况下,我们会对需要的业务处理对象(数据访问,业务逻辑等)一一做上接口,前端使用时只是对接口的调用,而并不关心具体是什么类具体去实现了这个接口~听起来似乎不可能,是的,如果没有IOC,这是不可能的事情,我们的前端逻辑和后端实现是紧紧耦合的,做页面开发的人必须知道哪一个类(.cs文件)拥有哪些方法,即便是基于接口,我们也依然要在程序里去实例化它,形如:


    IManager mgr = new DataManager();

      

    无形中,基于接口开发成了鸡肋,前端开发人员几乎要知道一条龙的编码流程才能做业务开发!(当然,有的项目就是一个人在做)

    好吧,那就使用IOC,它是怎么解开这个耦合关系的?

    IOC框架一般会维护一个配置文件,它大概要完成的使命是:

    1、将实现接口的对象进行列表,表示它们是被页面需要的;

    2、把页面的以基于URL的形式进行列表,表示它们是需求方。

    余下的事情,是框架来进行协调,在页面上声明一下某一个接口的对象,在它需要实例化时,IOC框架会自动将对应的接口实现进行注入。如下就是一个Spring.net的配置范例片断:

    Code

     再看看页面里的声明和调用片断:

      

    Code

    如果是初次接触IOC,可能理解起来会有些生涩,毕竟是个基于配置的框架,有些东西需要深入了解,这个以后可以一步步探个究竟。OK,接着就是AOP。

     那么AOP又是做什么的呢?Aspect Oriented Programming,字面意思即为“面向切面的编程”。Aspect,就是切面,代表了我们很多项目中重复开发的模块,如邮件功能,日志功能等。

    说起来是会让人很颓废的,我们花费在重复劳动上的时间,有时太多了。这个项目写日志,下一个还写日志,日志有区别吗?答案是没有,但它就是需要,哪怕是复制粘贴,还是需要!被需要当然是好事,说明它存在的价值,但能否把这样的东西做成一个组件,以后拿来就用,并且与新的项目系统人我两不犯,无缝集成?

    当然是可以的,AOP在此时的价值会得到充分的体现。就我个人而言,对它的理解,更多的是一个监听器,侦测你的业务是否有相关的需要,只要你有需要发出,AOP框架就会在你需要的地方设一个断点,进行功能模块的切入,让它去做你希望它做的事。就这么神奇~

    这里放出一个代码片断,小小注解一下以上比较让人头晕的概念:

      

    Code

      

    这一代码片断实现的功能是:如果发现系统中新增了一个用户(即User的业务管理器调用了Save方法),那么在日志系统中,存储一下用户名,让管理员可以在翻日志时知道谁又加入了~

    当然,就这么一段代码并不能完成这个监控功能,同样的,我们必须做配置(Spring.net把开发提高到了对配置进行管理的境地,你在配置管理上花的时间,将大于以往,好处是更关注和贴近业务而不是代码),告诉AOP框架,我们希望监听哪些对象的哪些动作,以及监听到后我们要调用哪些模块来采取行动:

      

    Code

      

    也许这样的配置片断更让人犯晕,没关系,习惯了就好,有些事情需要我们自己去做(DB,ENTITY,DAO,BLL开发),有些事情需要的是我们去理解(AOP框架,通知,切面,代理对象),相信不需要多长时间,这些都不是问题。

    关于IOC和AOP,以上只是寥寥几笔带过,在以后的实例系列中,将各个击破

    实例主要围绕的是一个音乐网站的搭建(有点儿像AllMusic内样的,而不同于别的什么无聊SNS社区),会涉及的内容是:Spring.net、nHibernate、codeSmith模板、多对多表结构、Castle MonoRail(虽然有人强建不建议把MonoRail集成到Spring.net中,但我至今没找到.net 2.0下好的MVC解决方案,用用MonoRail有助于更好理解MVC,优化性能)。

    【转载】http://www.cnblogs.com/luohoufu/archive/2008/08/18/1270028.html

    不登高山,怎知天高;不临深溪,焉知地厚!站在坚实的土地上,做着生命中最真实的事情;像一棵挺拔的大树,认可自己的命运并敢于迎接属于这一方天空的风风雨雨。

  • 相关阅读:
    Lucene in action 笔记 case study
    关于Restful Web Service的一些理解
    Lucene in action 笔记 analysis篇
    Lucene in action 笔记 index篇
    Lucene in action 笔记 term vector
    Lucene in action 笔记 search篇
    博客园开博记录
    数论(算法概述)
    DIV, IFRAME, Select, Span标签入门
    记一个较困难的SharePoint性能问题的分析和解决
  • 原文地址:https://www.cnblogs.com/net2012/p/2823021.html
Copyright © 2011-2022 走看看