LindDotNetCore~框架介紹及特色功能(有點springboot的意思)


LindDotNetCore模塊介紹
大叔博客

LindDotNetCore相關模塊介紹

  • [x] 全局都是依賴DI
  • [x] 消息隊列
  • [x] NoSql
  • [x] Caching
  • [x] 倉儲
  • [x] 服務總線
  • [x] Solr
  • [x] 調度
  • [x] 日志
  • [x] Asspect攔截組件
  • [ ] UAA授權
  • [ ] 各種組件環境的搭建
  • [x] 各模塊單元測試編寫

DI統一戰線

LindDotNet框架同樣采用了全局DI注入的方式來使用模塊對象的,這種松耦合的設計對於單元測試
是很方便人。

services.AddLog4Logger(o =>
{
    o.Log4ConfigFileName = "log4.config";
    o.ProjectName = "test";
});
services.UseDapper(o =>
{
    o.ConnString = $"Data Source=/Data/intergratetest.db";
    o.DbType = Lind.DotNetCore.Repository.DbType.SqlLite;
});

消息隊列

消息隊列主要使用'rabbitmq,kafka'實現的,用來解耦項目,處理高並發任務和耗時任務,生產者
不需要關心是誰來消費,它只管把消息發到隊列中;而消費者不關心消息如何產生,只把消費按着
業務邏輯去處理掉!

services.AddRabbitMQ(o =>
{
    o.ExchangeName = "Piliapa.zzl";
    o.MqServerHost = "192.168.200.214";
    o.VirtualHost = "/";
    o.ExchangeType = "topic";
});

NoSql

目前框架的NoSql部分由redis和mongodb組成,之所有選擇這兩種框架最大的原因就是它們覆蓋了
NoSql所有的使用場景,像redis用來存儲k/v鍵值對,支持5大數據結構;而mongodb用來存儲文檔
型數據,支持復雜的查詢,嵌套查詢等。

services.AddRedis(o =>
{
    o.Host = "localhost:6379";
    o.AuthPassword = "";
    o.IsSentinel = 1;
    o.ServiceName = "mymaster";
    o.Proxy = 0;
});

Caching

數據緩存是比較重要的部分,用來存儲一些熱數據,目前分布式環境使用redis,單機可以直接使用
運行時緩存。

services.AddRuntimeCache(o =>
{
    o.CacheKey = "lindCache";
    o.ExpireMinutes = 5;
});

倉儲

倉儲主要簡化數據持久化的操作,對外提供簡單的CURD操作接口,使用者直接調用即可,不需要干預SQL語句,
從這點上來說,開發效率確實提升了不少。目前大叔框架里集成了ef,dapper,mongodb,redis,elastic等倉儲,其中
EF和Dapper可以操作sqlserver,mysql,sqllite等數據庫。

services.UseDapper(o =>
{
    o.ConnString = $"Data Source={Directory.GetCurrentDirectory()}/intergratetest.db";
    o.DbType = Lind.DotNetCore.Repository.DbType.SqlLite;
});

服務總線

服務總線主要是用來解耦項目的層與層之間的調用,讓程序員把關注點放在業務上,目前框架提供了IOC模式的事件,
基於簡單內存字典存儲的事件等。

services.AddIocBus();
services.AddInMemoryBus();

Solr

Solr是在Lucene基礎之前開發的,使用java編寫,一般部署在tomcat上,有自己的圖像管理界面,可以用來管理core,
一般地,我們在設計一個core時,需要為它建立對應的實體,與它的core里的屬性對應起來;solr有豐富的插件,像一些
中文分詞包,索引包等。

services.AddSolrNet(o =>
{
    o.ServerUrl = "http://192.168.200.214:8081/solr/system_companysubject";
    o.UserName = "sa";
    o.Password = "sa";
});

調度服務

調度服務是以quartz為核心,並對它的功能進行了封裝,支持實時添加的任務,這一點使用了windows/linux的目錄監控事件
,也是.netcore幫我們實現的,我們只需要訂閱相關事件即可。

var watcher = new FileSystemWatcher
{
    Path = AppDomain.CurrentDomain.BaseDirectory,
    NotifyFilter = NotifyFilters.Attributes |
                   NotifyFilters.CreationTime |
                   NotifyFilters.DirectoryName |
                   NotifyFilters.FileName |
                   NotifyFilters.LastAccess |
                   NotifyFilters.LastWrite |
                   NotifyFilters.Security |
                   NotifyFilters.Size,
    Filter = "*.dll"
};
// quartz運行時,可以添加新job,但不能覆蓋,刪除等
watcher.Created += new FileSystemEventHandler((o, e) =>
{
    foreach (var module in Assembly.LoadFile(e.FullPath).GetModules())
    {
        foreach (var type in module.GetTypes().Where(i => typeof(ISchedulingJob).IsAssignableFrom(i)))
        {
            JoinToQuartz(type, DateTimeOffset.Now);
        }
    }
});
//Start monitoring.
watcher.EnableRaisingEvents = true;

日志

日志框架與之前的Lind框架里日志差別不大,只是把對象的生命周期移到了DI容器去統一管理,都采用單例方式,目前日志框架提供了
對log4net的支持,同時輕量級日志可以使用lindlogger來實現。

services.AddLog4Logger(o =>
{
    o.Log4ConfigFileName = "log4.config";
    o.ProjectName = "test";
});

Asspect攔截組件

方法攔截在微軟mvc,api框架里應用十分廣泛,可以在方法執行前與執行后動態添加一切邏輯,而不需要關注方法細節,實現攔截行為
的開發人員不需要去關注方法細節,這利用了面向對象的封裝特性,而也符合開閉原則,因為你可以在不修改原來代碼的情況下,動態
為它添加行為。

[Fact]
public void FuncInvoke()
{
    var obj = ProxyFactory.CreateProxy<AspectTest, AspectTest>();
    Assert.Equal("OK", obj.GetHello());
}
[Fact]
public void ActionInvoke()
{
    var obj = ProxyFactory.CreateProxy<AspectTest, AspectTest>();
    obj.SetHello();
    Assert.Equal(1, 1);
}

待續...
回到目錄


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM