在LindAgile中有一個比較主推的技術,就是模塊化,一切組件都可以被抽象成一個小小的模塊,而每個小模塊的實現可能又有多種方式,如日誌模塊可以有LindLoger,Log4net等實現,而具體在程式中使用哪種方式,是否由模塊的註冊順序決定的,在程式初始化時,一切會註冊這些模塊,一個日誌模塊,如果先 ...
在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里把它完善了,再配合模塊化,插件化等組件,能得數據集緩存達到了前所末有的高度!
我不要複雜的設計
我不要過重的設計
我只要簡潔的,松耦合的實現!