LindAgile.Modules模块化的设计

在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里把它完善了,再配合模块化,插件化等组件,能得数据集缓存达到了前所末有的高度!

我不要复杂的设计

我不要过重的设计

我只要简洁的,松耦合的实现!

 

posted @   张占岭  阅读(654)  评论(2编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
历史上的今天:
2012-05-25 Linq To Sql模式中自动生成T-SQL增删改操作系列~PropertyChanged事件实现在子类中记录属性的变化,在基类中进行统一处理
2011-05-25 说说面向对象的故事,主人是人类!(二)
点击右上角即可分享
微信分享提示