目前用的這種,有沒有更好的方法
uj5u.com熱心網友回復:
你的id很熟,你的問題俺們也很熟https://bbs.csdn.net/topics/397089948
說實話,你是一個很勤奮的程式員,值得表揚和夸贊。但是我覺著你應該是時候把博客園帶給你的影響完全清除出去了,因為博客園那種是“預練其功,先廢雙腿,然后用我之拐,保你健拐如飛,快如柯鎮惡,帥比段延慶”------------可惜已經是個瘸子了
也許上面這句話很多人不想聽,不想看。因為他們不想承認已經瘸了的事實。但是我們說,前面瘸了就瘸了,盡量以后別自廢“雙腿”了
先來看你的前貼,你前貼想萬能,我們說不需要。因為運維自己就能很好處理這件事,你做好你的事情,不需要你去萬能。因為如果你廢掉雙腿,用拐去萬能后,博客園的兄弟又告訴你了------廢掉雙腿,未必成功------------我們用Ocelot網關了,然后一堆人聊天也是言必稱Ocelot(當然這個依舊是個廢雙腿,還帶挖眼睛的東西,這個我們后面在說)
在來看你現貼的問題,其實依舊是相同的問題。為啥你要萬能,我們不要萬能。我們不是神,承認自己不是神,就好。當然承認自己不是神,就是說我們是人,人要有雙腿,別砍。你平時怎么做就怎么做,你平時怎么走路就怎么走路,別說我要萬能就砍腿用拐。
那么怎么弄,跟你前貼的回答就是一個回答。前貼人家用網關,用路由。你這里一樣,名字誰便你起,你叫邏輯網關也好,你叫動作路由也罷都行。也就是別搞萬能大法,你就讓他們自己保持獨立。然后用網關也好,路由也罷,總線topic也行,命名管道也成,pipeline管道也行(整個asp.net core不都在這里么,他的整個pipeline管道怎么找到control的,他各個號稱的中間件怎么根據不同的東西處理不同東西的,就不說中間件把,我就說asp.net core讓我們跟你這個萬能大法一樣去寫case 1 control1,case2 control2 了么,很明顯沒有的,他只是告訴你繼承controlbase,然后按規則實作)
好了,廢話說到這里,你自己理解
我們在來說Ocelot網關為啥還是廢雙腿,挖眼睛在推拐,推雷達了!因為這塊總體是人家運維的活,運維有自己的武功和兵器。人家有得是高功絕藝,自動化編排工具,自動化部署工具,性能監控和分析工具,鏈路監控工具,日志采集和分析工具,報警工具和預案處置工具。你讓人家玩這個,豈不是自費武功么
uj5u.com熱心網友回復:
所以你這個東西,根據pipeline可以不可以呢,就你目前的貼出來部分是完全可以用的微軟asp.net core 中間件體系我暫時不想推,因為不夠干凈,他要完成的東西過多,有些龐雜
所以我們先從一個相對比較干凈的基礎開局
https://github.com/ipvalverde/PipelineNet
var pipeline = new Pipeline<這就是你那方法的引數,我們叫背景關系物件>(new ActivatorMiddlewareResolver())
.Add<動作1>()
.Add<動作2>()
.Add<動作3>();
.add(typeof(動作3)) //注意他還有這個的,我特地擰出來,是因為他支持注冊type的,所以這塊我們其實也不用這樣一個一個的手寫,我們可以直接在啟動的時候把所有實作了特定動作介面的type用反射查出來,然后用回圈加進去,這樣無論你后面寫多少個都行,這樣就能達到上面的說,你只管繼承實作,別管什么case的事情
至于動作
在看他的例子
public class PersonWithOddId : IAsyncMiddleware<PersonModel> //這個PersonModel就是你的那個方法引數,我們叫背景關系引數
{
public async Task Run(PersonModel context, Func<PersonModel, Task> executeNext)
{
if (context.Id.HasValue && context.Id.Value % 2 != 0) //這里你看到了,他會根據背景關系引數去做自己的事情
{
context.Level = 2;
//這里呢,是如果我這里做了,后面就別做了,那么就直接return,不要做下面就好
}
await executeNext(context); //這里呢是交給下個動作去判定自己要不要做
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/275308.html
標籤:ASP.NET
