文章出處

在LindAgile中有一個比較主推的技術,就是模塊化,一切組件都可以被抽象成一個小小的模塊,而每個小模塊的實現可能又有多種方式,如日志模塊可以有LindLoger,Log4net等實現,而具體在程序中使用哪種方式,是否由模塊的注冊順序決定的,在程序初始化時,一切會注冊這些模塊,一個日志模塊,如果先注冊了log4net,后注冊了lindLogger,那種先注冊的將會被覆蓋。

日志模塊-圖示

模塊的注冊與使用-圖示

模塊化的入口

對于模塊的擴展,大叔建議在具體項目添加擴展方法,事實上在lindAgile框架里也提供了一些標準的擴展方法,方便大家對模塊進行注冊!

 #region 模塊化
  ModuleManager.Create()
               .UseAutofac()
               .UseLindLogger()
               .UseEfRepository()
               .UseDefaultMq()
               .UseESBRedis()
               .InitAllPlugins();
#endregion

而對于使用來說,直接可以使用Module的Resolve來生產指定接口的指定對象,非常方便!

var old = PluginManager.Resolve<IAopHelloTest>();
var result = old.GetLogger("bobo");

上面的代碼中,我們使用的是LindAgile的面向切面的方法緩存,將方法的返回值進行緩存,一個緩存的失效由另一個方法來控制,而不是傳統上的時間!

    public interface IAopHelloTest : IAspectProxy
    {
        List<WebLoggers> GetLogger(string name);
        void AddLogger(WebLoggers entity);
    }
    public class AopHelloTest : IAopHelloTest
    {
        [CachingAspect(CachingMethod.Get)]
        public List<WebLoggers> GetLogger(string name)
        {
            return new Tsingda_Prizes_ManagerEntities().WebLoggers.Take(10).ToList();
        }
        [CachingAspect(CachingMethod.Remove, "GetLogger")]
        public void AddLogger(WebLoggers entity)
        {

        }
    }

這種設計在Lind框架中也有出現過,只是在LindAgile里把它完善了,再配合模塊化,插件化等組件,能得數據集緩存達到了前所末有的高度!

我不要復雜的設計

我不要過重的設計

我只要簡潔的,松耦合的實現!

 


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()