精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

為什么我不再用 .NET 框架

開(kāi)發(fā) 架構(gòu) 后端
.NET平臺(tái)很棒。真的很棒。直到它不再那么棒。我為什么不再用.NET?簡(jiǎn)單來(lái)說(shuō),它限制了我們選擇的能力(對(duì)我來(lái)說(shuō)很重要),轉(zhuǎn)移了我們的注意力,使得我們向內(nèi)認(rèn)知它的安全性,替代了幫助我們認(rèn)知外面廣闊世界的所有可能性。

.NET平臺(tái)很棒。真的很棒。直到它不再那么棒。我為什么不再用.NET?簡(jiǎn)單來(lái)說(shuō),它限制了我們選擇的能力(對(duì)我來(lái)說(shuō)很重要),轉(zhuǎn)移了我們的注意力,使得我們向內(nèi)認(rèn)知它的安全性,替代了幫助我們認(rèn)知外面廣闊世界的所有可能性。

[系好安全帶:這個(gè)文章的長(zhǎng)度幾乎成了一本書(shū)…]

優(yōu)點(diǎn)

首先讓我開(kāi)始說(shuō)說(shuō).NET做得對(duì)的許多事吧,盡管這其中的大多數(shù)并不來(lái)自.NET本身,但卻是由.NET社區(qū)而來(lái)。

C#

C#令人驚嘆。我認(rèn)為它是一個(gè)令人驚嘆的編程語(yǔ)言。從強(qiáng)大的C語(yǔ)言背景而來(lái),我徹底地喜歡其語(yǔ)法,流和這門(mén)語(yǔ)言的所帶來(lái)的感覺(jué)。當(dāng)然有我可能改變的事,但總體來(lái)說(shuō)它是一門(mén)扎實(shí)的語(yǔ)言。并且基于開(kāi)發(fā)人員使用的編程語(yǔ)言如此巨額的百分比和Windows操作系統(tǒng)的優(yōu)越性,它是一門(mén)眾所周知的語(yǔ)言。

ReSharper

我也很喜歡Resharper。在JetBrains工作的開(kāi)發(fā)者們都是奇跡般的人。如果沒(méi)有ReSharper和一些相關(guān)的工具,我可能并不會(huì)如此喜歡C#。

BDD and MSpec

我也很喜歡簡(jiǎn)稱為機(jī)器規(guī)格(mspec)的BDD風(fēng)格的框架。它是一個(gè)令人驚嘆的測(cè)試框架,真正支持在測(cè)試中使用正確的語(yǔ)言測(cè)試本身。在使用mspec之前,我的測(cè)試真是一團(tuán)糟并且很礙我的事。

另外,當(dāng)我們創(chuàng)建GoConvey—基于Golang的BDD測(cè)試框架的時(shí)候,Mspec對(duì)于我的組織來(lái)說(shuō)是一個(gè)巨大的靈感和激勵(lì)。

多語(yǔ)言運(yùn)行時(shí)

我認(rèn)為多語(yǔ)言的CLR(公共語(yǔ)言運(yùn)行時(shí))的觀念真得使得JVM的世界思考著。我不知道任何非Java的JVM語(yǔ)言在CLR之前,但隨著“公共語(yǔ)言運(yùn)行時(shí)”的到來(lái),我的理解是這使得使用JVM的人們向前進(jìn)并且最終創(chuàng)造了如Scala和Clojure這樣偉大的JVM編程語(yǔ)言。如果我錯(cuò)了請(qǐng)糾正我。再者,CLR使得Sun公司的人們坐下來(lái)并關(guān)注它,因?yàn)镴ava有一點(diǎn)陳舊并且隨著Java 8的到來(lái),僅僅現(xiàn)在才在多個(gè)方面追趕著。競(jìng)爭(zhēng)是一件非常好的事。

NuGet

另一個(gè)顯著的例子是NuGet。這個(gè)包在Windows中作為一個(gè)整體特別是在Windows的開(kāi)發(fā)中,它的管理軼事是糟透的。NuGet解決了很多問(wèn)題,他們也通過(guò)從Python和Ruby借用了很多東西去做了很多正確的事。有改進(jìn)的余地嗎?當(dāng)然。但比起其他一些選擇在這兒或那兒的包升級(jí)來(lái)說(shuō),我還沒(méi)有感到使用NuGet有這許多痛楚。

Mono

對(duì)于Mono的開(kāi)發(fā)者們,我不能不說(shuō)太棒了。他們所創(chuàng)造的太驚奇了。沒(méi)有任何官方支持和不顧潛在的懸在他們頭上的法律問(wèn)題,他們向前推進(jìn)并創(chuàng)造了一個(gè)居然能替代官方運(yùn)行時(shí)的實(shí)現(xiàn)。我已經(jīng)有一些運(yùn)行在產(chǎn)品中應(yīng)用程序,在Mono下運(yùn)行了幾乎一年而沒(méi)有任何問(wèn)題。它的產(chǎn)品準(zhǔn)備好了嗎?這可能取決于你的應(yīng)用程序(見(jiàn)下文“Mono”)。

CQRS 和事件溯源

可以認(rèn)為,關(guān)于.NET最好事之一是,它是CQRS的誕生地并有相關(guān)的技術(shù):事件溯源。就算這樣,CQRS+ES本身并沒(méi)有什么很新的東西。正如Greg Young將會(huì)告訴你的,這是由一堆40年歷史原料為我們重新打包并更名的。對(duì)于大型代碼庫(kù)我有些非常嚴(yán)重的問(wèn)題,當(dāng)我5年前使用CQRS+ES的時(shí)候,它完全釋放了我的域。CQRS+ES現(xiàn)在是命名模式的并且其成長(zhǎng)是顯而易見(jiàn)的。這可能是因?yàn)?NET已經(jīng)能夠和其他的開(kāi)發(fā)平臺(tái)交互共享的原因。除了這個(gè)之外,大多數(shù)的創(chuàng)新是從外部來(lái)的。

缺點(diǎn)

優(yōu)點(diǎn)先放在一邊,讓我們看看什么出錯(cuò)了和我為什么不再用.NET框架。關(guān)于我最近開(kāi)發(fā)平臺(tái)的遷移,最能激勵(lì)我的事是我可以利用許多最好的部分而丟下不好的部分(如下文所說(shuō))。

Windows

正如前文所述,當(dāng)面對(duì)基于網(wǎng)絡(luò)的服務(wù)器軟件時(shí),Windows并不是一個(gè)好的選手。在我看來(lái),Windows的另一個(gè)真正的大問(wèn)題是傳統(tǒng)的Windows開(kāi)發(fā)者是通常僅僅擅長(zhǎng)于Windows,當(dāng)他們離開(kāi)安樂(lè)窩之后就會(huì)很快迷失,這對(duì)于Linux開(kāi)發(fā)者來(lái)說(shuō)卻不是問(wèn)題。計(jì)算遠(yuǎn)不止是Windows。開(kāi)發(fā)者僅僅能操作單一的操作系統(tǒng)的一個(gè)問(wèn)題是它不可避免得導(dǎo)致Windows的激增。換句話說(shuō),Windows生了Windows。沒(méi)辦法打破這個(gè)循環(huán)。

另一方面,*NIX的開(kāi)發(fā)者通常熟悉多操作系統(tǒng)(Linux,Unix,OSX,Windows等等),一個(gè)操作系統(tǒng)的內(nèi)部工作原理,不同的分布(基于Debian和基于Fedora),窗口管理器,桌面管理器,文件系統(tǒng),包管理,編譯,重新編譯,重新打包,命令行“fu”等等。

我的一個(gè)心病是文件系統(tǒng)。NTFS并不是系統(tǒng)唯一的文件系統(tǒng),對(duì)于任何給予的任務(wù)它幾乎都不是最好的選擇。ZFS,BTRFS,ReiserFs,ext*等等,有一些很酷的特性。我也很喜歡為了各種高速/透明的磁盤(pán)操作,能從BASH創(chuàng)建回路設(shè)備或者創(chuàng)建RAM設(shè)備。這在Windows中不會(huì)發(fā)生—如果沒(méi)有第三方軟件的話。

在AWS云服務(wù)中,啟動(dòng)一個(gè)Windows機(jī)器要花掉足足10多分鐘。我大約15-20秒就能啟動(dòng)一個(gè)簡(jiǎn)單的Linux機(jī)器。當(dāng)涉及到云計(jì)算規(guī)模,它能夠迅速擴(kuò)展是很重要的,因?yàn)楫?dāng)擴(kuò)展很重要時(shí),10-15分鐘就像是永恒的。

Visual Studio

在我這另一根刺,當(dāng)屬Visual Studio。我需要一個(gè)大大超出預(yù)期的 IDE 去做任何開(kāi)發(fā),這個(gè)想法困擾著我。它只是如Windows一樣龐大的資源豬。我有一個(gè)內(nèi)核i7 3770K 3.5GHZ的臺(tái)式機(jī),以16GB的內(nèi)存和最大4512GB的固態(tài)硬盤(pán)去編譯。它差不多刷爆了Windows體驗(yàn)指數(shù),但Windows+VS仍然很慢。(是的,ReSharper使得它更慢了,但是ReSharper對(duì)這來(lái)說(shuō)是值得的。)

現(xiàn)在我在MacBook Pro上開(kāi)發(fā),它比起我的強(qiáng)大的臺(tái)式機(jī)來(lái)說(shuō)只有更少的CPU馬力,但運(yùn)行明顯更快,在一個(gè)短小的學(xué)習(xí)曲線之后,UX(用戶體驗(yàn))變得無(wú)限美好了。事實(shí)上,我甚至不再用鼠標(biāo)了—我的雙手一直在鍵盤(pán)或觸控板上,我可以用手勢(shì)操作我的電腦并讓它回應(yīng)—不像在Windows。

關(guān)于VS很酷的一個(gè)事是調(diào)試器。它的查看和使用,令人難以置信得方便。每隔一段時(shí)間會(huì)在監(jiān)視窗口報(bào)告錯(cuò)誤的值,導(dǎo)致花費(fèi)更多時(shí)間去調(diào)試。同時(shí),這也是很大的負(fù)面,因?yàn)镃LR默認(rèn)的,多線程的世界使得我一開(kāi)始就需要一個(gè)調(diào)試器。沒(méi)有調(diào)試器是一個(gè)解脫的體驗(yàn),因?yàn)樗仁鼓阋粤硪环N方式編程。

VS同樣也有創(chuàng)建“csproj”和“sln”文件的壞毛病。我恨這些。當(dāng)然,C#必須知道編譯什么和何時(shí)編譯。我理解這點(diǎn)。在Golang中,引用在代碼中使用了很重要的語(yǔ)句。如果它不是.NET中用到的工程文件,我可能使用簡(jiǎn)單的文本編輯器編碼C#,并且對(duì)這門(mén)語(yǔ)言更流暢。使用git rebase操作時(shí),這些文件也有導(dǎo)致合并沖突。

別讓我開(kāi)始說(shuō)換行符的差異。我不能相信直到今天我們還在處理這樣的事。如果VS解決方案文件以Linux行結(jié)束符結(jié)束,通過(guò)雙擊它并不能載入該解決方案,因?yàn)閂S解決方案文件分析器讀不出它來(lái)。

源代碼管理

幸運(yùn)的是,我早就跳出了微軟陣營(yíng)的源代碼管理(版本控制系統(tǒng)VSS)。我早在2000年初,在VSS無(wú)數(shù)次丟失了我的提交之后,就使用了Subversion(譯者注:Subversion是開(kāi)源的版本控制系統(tǒng))。之后git(譯者注:git是開(kāi)源的版本控制系統(tǒng),內(nèi)容管理系統(tǒng)等)出現(xiàn)了,我又迷上了它。不幸的是,沒(méi)有Windows的接口—對(duì)我來(lái)說(shuō)是典型的遭遇。最終有人創(chuàng)建了一個(gè)接口,我就用了那個(gè)并且沒(méi)有回頭。Git是一把非常鋒利的刀,但當(dāng)你正確運(yùn)用它的時(shí)候,它是一個(gè)強(qiáng)大而高效的工具。我曾經(jīng)在一個(gè)小工程中用過(guò)TFS(譯者注:Team Foundation Server,工作流協(xié)作引擎),它是一個(gè)怪物—和所有來(lái)自Redmond(譯者注:美國(guó)微軟總部)的產(chǎn)品一樣。它感染了我的項(xiàng)目文件并且污染了我的源代碼目錄。真可惡。不,還是謝謝你。給了我任意一天用命令行g(shù)it…或者可能是SourceTree,如果你需要從GUI得到一點(diǎn)關(guān)愛(ài)。

Mono

是的,這是第二次提及Mono。正如Mono本身如此驚艷一樣。在.NET的世界,它仍然二等公民。無(wú)論什么時(shí)候我嘗試在Mono上運(yùn)行任何重要的東西,我通常都在和漏洞作斗爭(zhēng)。幸運(yùn)的是,對(duì)下載代碼,查找問(wèn)題,發(fā)送請(qǐng)求和在Linux上編譯代碼我沒(méi)有感到不舒服。但是這件事我都記不清做了多少遍了。

是的,CLR是個(gè)巨大的怪物,并且對(duì)一個(gè)非官方的應(yīng)用在不同的操作系統(tǒng)都有相同的行為,簡(jiǎn)直是個(gè)類似于分開(kāi)紅海的奇跡。但事實(shí)是,我不得不花費(fèi)如此多的時(shí)間來(lái)填補(bǔ)漏洞以使我的代碼能夠正確運(yùn)行,實(shí)在是很難為其辯護(hù)。

Mono的特定區(qū)域也慢。也許它不是在慢在過(guò)載,但對(duì)我來(lái)說(shuō)Web服務(wù)器是關(guān)鍵所在。并且它非常慢,最后,慢到了最底下—即使是微不足道的東西。我想好消息是它只能從這兒得到更好的。我也應(yīng)該提及Mono的開(kāi)發(fā)者可能忘了Linux,比起我可能知道的還多,所以我不能太挑剔。

IIS

也許IIS在嘗試著為太多的應(yīng)用程序做太多的事情。它從作為一個(gè)web服務(wù)器變?yōu)橄馢2EE應(yīng)用程序容器一樣的應(yīng)用程序宿主。它也站在慢速這一邊。我猜如果我需要更高的性能,我應(yīng)該編寫(xiě)我自己的web服務(wù)器,但我真的很想只關(guān)注我應(yīng)用程序的代碼。可能利用Windows事件服務(wù)器將是好的,但nginx(譯者注:一個(gè)高性能的HTTP和反向代理服務(wù)器,也是一個(gè)IMAP/POP3/SMTP代理服務(wù)器)和其他服務(wù)器只是不喜歡在Windows中生產(chǎn)。

虛擬的以JVM為基礎(chǔ)的實(shí)現(xiàn),例如Netty(譯者注:JBOSS提供的一個(gè)java開(kāi)源框架),很容易處理每秒650K+/的請(qǐng)求量。IIS在運(yùn)行一個(gè)簡(jiǎn)單的CLR應(yīng)用程序“Hello,World!”,處理大約每秒50K的請(qǐng)求量時(shí)就會(huì)壅塞。(有趣的題外話,參考基準(zhǔn)開(kāi)發(fā)者通過(guò)TCP套接字創(chuàng)建了一個(gè)簡(jiǎn)單的C#的web服務(wù)器,它能處理大約每秒120K的請(qǐng)求量。)

#p#

狹隘的心理

前些年有個(gè)運(yùn)動(dòng)叫做ALT.NET。該運(yùn)動(dòng)是全部是關(guān)于尋找我們自身之外的更廣闊的開(kāi)發(fā)社區(qū)以作為一個(gè)整體,并匯聚不同的部分。有趣的是,那是StructureMap、Autofac、NuGet、ASP.NET MVC和許多其它工具的靈感來(lái)源。在傳統(tǒng)的.NET的圈子里,這個(gè)運(yùn)動(dòng)受到了很多的不屑和鄙視。我把這看作是,作為一個(gè)整體的社區(qū)普遍的狹隘心理和怠惰的一個(gè)極大的例證。(的確,它們中的一些可能會(huì)消失,進(jìn)而以包括Redis,MongoBD還有其它的不同的技術(shù)而出現(xiàn)。)

有這么多很棒的方案在那里。假定微軟已注定是唯一正確之路的想法是荒謬的。如果是這樣的話,我們就都還在使用Visual Studio的設(shè)計(jì)工具去拖放按鈕和鏈接元素到一個(gè)WebForm的界面上,我們會(huì)設(shè)定了該按鈕并且依賴ViewState以幫助我們與可怕的HTTP所帶來(lái)的恐懼隔開(kāi)。我從我的一個(gè)部署的代碼庫(kù)中最后一個(gè)WebForm中擺脫的那一天,是個(gè)光榮的值得慶賀的日子。

誰(shuí)又曾想過(guò)“網(wǎng)絡(luò)控制”是個(gè)好主意?很顯然我考慮過(guò)因?yàn)槲液攘薑ool-Aid(譯者注:卡夫公司出品的飲料,這里意指明知是注定的或有危險(xiǎn)的仍然去做,有負(fù)面涵義)并且完全接受它。它狠咬了我。見(jiàn)過(guò)2MB的ViewState嗎?

[注:當(dāng)我寫(xiě)這篇文章的時(shí)候,原來(lái)的標(biāo)題,“為什么我不再用.NET”,意味著整個(gè).NET生態(tài)系統(tǒng)。標(biāo)題感覺(jué)有點(diǎn)短于是我更新為“為什么我不再用.NET框架”。我想.NET作為一個(gè)生態(tài)系統(tǒng),包括了所有的工具,工程,平臺(tái),組織還有很多開(kāi)發(fā)者。這就是為什么有些更廣泛的.NET社區(qū)的元素在我的這篇文章中受到抨擊原因。]

性能殺手

C,Java和C#中典型的多線程范例都強(qiáng)烈推薦使用鎖和互斥。對(duì)于鎖來(lái)說(shuō)有個(gè)隱藏的開(kāi)銷(xiāo):它們慢得難以忍受。使用Disruptor(JVM中的無(wú)鎖的環(huán)形緩存[譯者注:實(shí)際上就是擁有一個(gè)序號(hào)指向下一個(gè)可用元素的數(shù)組]),你可以很容易得每秒處理20M以上的事件。在.NET中使用規(guī)定的“最佳實(shí)踐”等任何超過(guò)每秒十幾次的傳輸,都被認(rèn)為是體面又好的性能表現(xiàn),在這一點(diǎn)上來(lái)說(shuō)你僅僅需要更大/更好/更多的硬件設(shè)備。事實(shí)上,我見(jiàn)過(guò)第三方客戶端庫(kù)(Rabbit,Couch,Mongo等等)中鎖語(yǔ)句遍布整個(gè)代碼。即使在我的代碼中沒(méi)有任何的并發(fā),默認(rèn)的和首選的方法都用了鎖。

無(wú)鎖的、事件驅(qū)動(dòng)的方法允許你大幅降低硬件和資金支出。大部分應(yīng)用程序可以輕易地運(yùn)行在兩臺(tái)機(jī)器上,第二臺(tái)機(jī)器僅僅在冗余和失效備援時(shí)是必須的,以防因?yàn)橛布嚓P(guān)的問(wèn)題導(dǎo)致第一臺(tái)機(jī)器不可用的時(shí)候起作用。

這個(gè)問(wèn)題的另一個(gè)方面是調(diào)用網(wǎng)絡(luò)和磁盤(pán)子系統(tǒng)的傳統(tǒng)方式:同步,阻塞代碼。如果你需要多個(gè)并發(fā)的HTTP請(qǐng)求,你需要更多的線程。大多數(shù)人不知道的是,為維持線程多出的1-2MB和上下文切換線程的需求,使得CPU內(nèi)核消耗所有的時(shí)間顛簸在上下文切換上而不是做真正的工作。所以現(xiàn)在我們得到了在一個(gè)應(yīng)用程序中數(shù)百或數(shù)千的線程,占用了RAM,并造成CPU停滯不前。還有個(gè)更好的方式。

Netty/NIO (JVM),Erlang,Node,Gevent (Python)和Go都支持使用事件驅(qū)動(dòng)的子系統(tǒng)操作(選擇/epoll[譯者注:Linux內(nèi)核中的一種可擴(kuò)展IO事件處理機(jī)制]/kqueue[譯者注:FreeBSD的可擴(kuò)展的事件通知接口])。這就意味著當(dāng)?shù)却龜?shù)據(jù)包被tx/rx跨網(wǎng)絡(luò)的時(shí)候,CPU可以自由地去做其它,重要的工作。因?yàn)镴VM的成熟,Netty可以認(rèn)為是做這項(xiàng)工作最快的,但我喜歡Go用Goroutines操作這個(gè)的方式—它簡(jiǎn)單,優(yōu)雅,很容易推理,沒(méi)有像意大利面條一樣的回調(diào)。

SQL Server

作為一名.NET開(kāi)發(fā)者,當(dāng)你開(kāi)始一個(gè)新的工程時(shí),有一些事是你通常會(huì)去做的:

  • 創(chuàng)建一個(gè)新的solution
  • 將其部署到Team Foundation Server(譯者注:Microsoft 應(yīng)用程序生命周期管理 (ALM) 解決方案的核心協(xié)作平臺(tái))
  • IIS中建立相應(yīng)的網(wǎng)站入口
  • 創(chuàng)建一個(gè)新的SQL Server數(shù)據(jù)庫(kù)
  • 在solution中關(guān)聯(lián)Entity Framework(通常是2010年之后創(chuàng)建的工程)
  • 開(kāi)始設(shè)計(jì)你的數(shù)據(jù)庫(kù)和ActiveRecord實(shí)體

在大多數(shù)情況下這不是編寫(xiě)代碼的正確方式。當(dāng)然它可能在某些情況下有效,但是作為一個(gè)“默認(rèn)的架構(gòu)”它并不是你想要的。為什么在我們甚至還沒(méi)理解問(wèn)題領(lǐng)域之前已經(jīng)做了任何技術(shù)上的選擇?這簡(jiǎn)直是本末倒置了。

微軟的生態(tài)系統(tǒng)鼓勵(lì)每個(gè)人使用SQL Server。在Visual Studio中和SQL Service進(jìn)行交互或者使用SQL Management Studio(和它的前身,SQL查詢分析器)是如此令人難以置信的容易。這種以數(shù)據(jù)庫(kù)為中心的重點(diǎn),是欽定的或唯一正確的方式的一部分。它使你更加迷戀微軟。廠商鎖定始終對(duì)廠商來(lái)說(shuō)是好的。

為什么我們要如此開(kāi)發(fā)?為什么我們不更多地考慮應(yīng)用程序的行為而不是它如何存儲(chǔ)的?現(xiàn)在我所有的項(xiàng)目都使用基于JSON的鍵/值存儲(chǔ)。有了這種功能,我可以選擇任何我想要的存儲(chǔ)引擎,包括SQL Server,Oracle,PostgreSQL,MySQL,Cassandra, CouchDB, CouchBase, Dynamo, SimpleDB, S3, Riak, BerkeleyDB, Firebird, Hypertable, RavenDB, Redis, Tokyo Cabinet/Tyrant, Azure Blobs,文件系統(tǒng)中的明文JSON文件等等等等。突然之間,我們能夠開(kāi)始根據(jù)其優(yōu)點(diǎn)而不是僅僅對(duì)其熟悉來(lái)選擇存儲(chǔ)引擎了。

題外話:在AWS RDS的云上運(yùn)行過(guò)SQL Server嗎?別這么做。當(dāng)然它會(huì)工作,但是一些例如復(fù)制這樣最簡(jiǎn)單的事是不存在的。文章充斥著對(duì)SQL Server不能在AWS RDS上工作的引用。

結(jié)論

也許我在軟件開(kāi)發(fā)中學(xué)到的兩件最重要的教訓(xùn)是:

  • 邊界和封裝的重要性(以多種形式)
  • 付出代價(jià)以得到正確的模型和抽象

許多年前我恨“模型”這個(gè)詞。每個(gè)人都會(huì)把它到處扔,它是一個(gè)如此過(guò)載的術(shù)語(yǔ),很難理解它的含義和它為什么這么重要。就這點(diǎn)來(lái)說(shuō),我僅僅會(huì)說(shuō)模型是對(duì)你想要封裝的現(xiàn)實(shí)的一個(gè)有限的表示。也許最簡(jiǎn)單的例子就是地球儀的墨卡托投影了。這很確切得說(shuō)明了一件事:導(dǎo)航。如果你在其他的事情上使用它,它并不毫無(wú)價(jià)值。如果你不專注于付出代價(jià)去使模型正確,去封裝商業(yè)現(xiàn)實(shí),那么沒(méi)有任何技術(shù)能夠拯救你。

我對(duì).NET最大的抱怨是,“唯一正確的方式”引導(dǎo)你遠(yuǎn)離理想的模型并把你推向關(guān)注實(shí)現(xiàn)細(xì)節(jié)和技術(shù)缺陷的方向。這樣的關(guān)注導(dǎo)致技術(shù)實(shí)施滲血并且感染模型,最終導(dǎo)致它腐爛變質(zhì),因?yàn)樗荒苓m應(yīng)不斷變化的商業(yè)需求。當(dāng)這發(fā)生的時(shí)候,開(kāi)發(fā)者掙扎著并蹬踢著,如同吸毒者一樣,他們從一個(gè)新技術(shù)轉(zhuǎn)向另一個(gè),以期望下一個(gè)強(qiáng)大的技術(shù)能夠治愈他們的病痛。

技術(shù)本身并不是靈丹妙藥,相反地,它是關(guān)于取舍和選擇。只有正確地理解了商業(yè)行為并把它們封裝進(jìn)結(jié)構(gòu)良好的,易于理解的模型中,以幫助保持技術(shù)堆棧在屬于它的地方—作為一個(gè)實(shí)現(xiàn)細(xì)節(jié)。

And that’s why I left the .NET Framework because it kept reasserting itself and wanting to be more than it was: an implementation detail. 這就是我為什么不再用.NET 框架,因?yàn)樗粩嗟刂厣曜约?的主張),不斷地想要比它的本身更多的:一個(gè)實(shí)現(xiàn)細(xì)節(jié)。

原文鏈接: Jonathan Oliver   翻譯: 伯樂(lè)在線 - EluQ

譯文鏈接: http://blog.jobbole.com/72987/

責(zé)任編輯:林師授 來(lái)源: 伯樂(lè)在線
相關(guān)推薦

2025-06-03 06:00:00

margin-topCSS開(kāi)發(fā)

2012-04-05 09:37:48

.NET

2023-04-04 19:14:40

Linux發(fā)行版Alpine

2022-05-17 14:28:42

編程語(yǔ)言Julia代碼

2016-06-14 09:48:19

框架

2021-06-03 08:45:44

Linuxls命令

2021-05-17 11:30:08

Linuxls命令

2017-03-13 08:40:45

AndroidDebugBuildConfig

2019-07-08 10:28:33

網(wǎng)絡(luò)認(rèn)證供應(yīng)商自動(dòng)化

2012-09-26 10:02:44

框架開(kāi)發(fā)項(xiàng)目

2012-05-22 00:25:41

.NET

2012-02-28 09:11:51

語(yǔ)言Lua

2020-07-17 14:06:36

Scrum敏捷團(tuán)隊(duì)

2012-04-04 22:07:12

Android

2023-06-26 08:20:02

openapi格式注解

2023-09-08 08:35:42

層疊樣式表CSS

2023-02-10 08:58:46

2018-05-31 21:50:12

云計(jì)算銀行安全

2022-12-12 07:30:59

編程語(yǔ)言架構(gòu)

2023-12-25 07:58:46

Python開(kāi)發(fā).NET
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

国产成人精品一区二区三区网站观看| 中国av一区| 亚洲午夜久久久久久久久电影院 | 亚洲一区二区三区av无码| 天堂av资源网| 久久精品国产精品亚洲红杏| 欧美伦理91i| 波多野结衣片子| 精品国产欧美| 欧美最猛性xxxxx直播| 波多野结衣 作品| 北岛玲一区二区三区| 国产激情视频一区二区在线观看| 91精品国产乱码久久久久久久久| 国产精品69久久久久孕妇欧美| av综合网站| 欧美日韩国产综合草草| 日韩国产欧美亚洲| av毛片在线| 国产欧美日韩亚州综合| 国严精品久久久久久亚洲影视 | 亚洲国产福利在线| 黄色一级片免费的| sis001欧美| 婷婷成人综合网| 国产91视频一区| 天堂а在线中文在线无限看推荐| 久久国产婷婷国产香蕉| 日韩美女免费视频| 国产精品999久久久| 91精品一区二区三区综合| 亚洲欧美精品中文字幕在线| 亚洲成年人在线观看| 成人精品视频在线观看| 欧美日韩一区二区三区在线看| 成年人午夜视频在线观看| 黄色网在线播放| 国产精品国产精品国产专区不片| 日本不卡二区| 九色在线视频| 久久看人人爽人人| 免费电影一区| 午夜性色福利影院| 99精品国产一区二区三区不卡| 97人人干人人| www.av导航| 国产精一区二区三区| 91久久国产精品91久久性色| 一级片在线观看视频| 免费久久精品视频| 国产精品你懂得| 日批视频免费观看| 日韩制服丝袜av| 国产精品久久久久久久久久小说 | 久草福利资源在线| 日韩.com| 日韩网站在线观看| 久久嫩草捆绑紧缚| 伊人久久大香线蕉综合四虎小说 | 岛国片av在线| 天天爽夜夜爽夜夜爽精品视频| 僵尸世界大战2 在线播放| 国产高清在线a视频大全| 一个色在线综合| 成人性生活视频免费看| 欧美日韩在线观看首页| 欧美午夜片在线免费观看| 熟女性饥渴一区二区三区| 波多野结衣久久精品| 色偷偷一区二区三区| 国产天堂在线播放| 国产精品成人国产| 日韩午夜在线影院| 亚洲天堂资源在线| 国产精品一在线观看| 中文字幕国内精品| 欧美日韩免费做爰视频| 亚洲理论在线| 国产精品av电影| 97在线视频人妻无码| 国产一区二区免费视频| 国产欧美韩日| 国产一二三在线观看| 亚洲欧美一区二区视频| 欧美成人精品免费| 国产精品高清乱码在线观看| 欧美久久一二区| 成人做爰69片免费| 在线看成人短视频| 欧美成人精品一区二区| 在线观看精品国产| 久久av资源网| 精品国产区在线| 幼a在线观看| 亚洲国产日韩a在线播放 | 国产一区二区三区四区五区美女 | 欧美一级淫片videoshd| 一区二区小视频| 不卡av在线免费观看| 新呦u视频一区二区| 蜜桃传媒在线观看免费进入| 色综合中文综合网| 欧美日韩一区二区区别是什么| 妖精视频一区二区三区免费观看| 日韩视频在线观看免费| 日韩av在线电影| 黄页视频在线91| 欧美精品亚洲精品| 日本片在线观看| 一本色道久久综合亚洲91| 乳色吐息在线观看| av资源久久| 51精品在线观看| 精品国产伦一区二区三区| 国产女人18水真多18精品一级做| avav在线播放| 亚洲我射av| 中文字幕欧美国内| 超碰中文字幕在线| 成人毛片视频在线观看| 一区二区三区av在线| 樱花草涩涩www在线播放| 日韩精品中文字幕在线不卡尤物| 在线观看免费小视频| 国产视频久久| 国产亚洲欧美一区二区| a在线免费观看| 欧美剧在线免费观看网站| 老头老太做爰xxx视频| 一区二区三区四区五区精品视频| 91视频网页| 米奇精品一区二区三区| 欧美日韩视频在线观看一区二区三区| av网站免费在线播放| 亚洲激情视频| 成人综合av网| 日本动漫同人动漫在线观看| 91麻豆精品国产91久久久使用方法| 国产一区二区三区四区五区六区 | 肉丝一区二区| 欧美日韩裸体免费视频| 麻豆精品国产传媒av| 国产综合自拍| 国产成人精品福利一区二区三区 | 日本高清久久天堂| 亚洲人视频在线观看| 五月天网站亚洲| 色综合久久五月| 亚洲制服少妇| 免费h精品视频在线播放| 亚洲美女久久精品| 亚洲三级av在线| 日韩一级片中文字幕| 欧美激情在线免费观看| 五月婷婷之综合激情| 日韩欧美二区| 成人黄色生活片| 成人免费在线| 精品国产一区二区三区四区四 | 在线视频观看一区| wwwww黄色| 精品一区二区三区久久| 少妇高潮大叫好爽喷水| aaa国产精品| 欧美黑人狂野猛交老妇| 欧美一区二区三区激情| 日韩欧美精品在线观看| 欧美 日韩 国产 成人 在线观看 | 欧美性色19p| 中文字幕免费高清| 精品一区二区三区在线观看| 91麻豆天美传媒在线| 伊色综合久久之综合久久| 欧美精品videos| 天堂在线中文字幕| 欧美三级视频在线播放| 欧美黑人猛猛猛| 97se亚洲国产综合自在线观| 麻豆传传媒久久久爱| 色综合久久一区二区三区| 99re国产| 黄色在线免费观看网站| 亚洲精品按摩视频| 最好看的日本字幕mv视频大全| 综合激情成人伊人| 色婷婷精品久久二区二区密| 日韩激情中文字幕| www.国产二区| 久久最新网址| 亚洲综合精品伊人久久| 久久电影tv| 欧美大片在线看| 久久久久久青草| 日韩欧美一区二区免费| 7799精品视频天天看| 亚洲欧美激情在线| 亚洲一区二区三区日韩| 丁香婷婷综合网| 国产又黄又猛又粗又爽的视频| 极品尤物久久久av免费看| 四虎影院一区二区三区 | 日韩精品中文字幕在线一区| 日本精品入口免费视频| 一个色综合av| 一级片黄色录像| 97久久人人超碰| 91aaa精品| 久久久蜜桃一区二区人| 妞干网在线播放| 久久影视一区| 欧美日韩另类综合| 日韩中文字幕视频网| 日本久久久久久| segui88久久综合9999| 色青青草原桃花久久综合| 五月天福利视频| 日韩一区二区三区免费看| 中国女人真人一级毛片| 狠狠色狠色综合曰曰| 久久久久久久蜜桃| 亚洲视频在线一区观看| 欧美做受xxxxxⅹ性视频| 国产成人免费av在线| 国产aⅴ爽av久久久久| 性欧美精品高清| 国产黄色片免费在线观看| 亚洲国产精品综合久久久| 色综合久久av| 狠狠做六月爱婷婷综合aⅴ | 四虎成人精品永久免费av九九| 精品在线视频一区二区三区| 亚洲天堂中文字幕在线观看| 91精品国产自产在线观看永久| 国模套图日韩精品一区二区| 国内精品久久久久久中文字幕| 欧美女同一区| 久久91亚洲精品中文字幕奶水| 日本免费视频在线观看| 中文字幕亚洲一区在线观看| av在线播放网站| 亚洲天堂免费观看| 欧美91精品久久久久国产性生爱| 亚洲国产一区自拍| 特黄视频在线观看| 亚洲精品久久久久中文字幕欢迎你| 午夜精品久久久久久久99| 欧美一区二区人人喊爽| 国产美女无遮挡永久免费| 91精品国产综合久久久蜜臀粉嫩| 一级片视频网站| 91麻豆精品国产自产在线观看一区| 91久久国语露脸精品国产高跟| 欧美麻豆精品久久久久久| 911美女片黄在线观看游戏| 欧美艳星brazzers| 一级片视频网站| 91精品国产色综合久久不卡蜜臀| 国产三级精品在线观看| 91精品国产麻豆| 午夜免费福利视频| 亚洲国产精品福利| 裸体xxxx视频在线| 中文字幕欧美在线| 成人a在线视频免费观看| 欧美人与性动交| 黄在线观看免费网站ktv| 欧美野外猛男的大粗鳮| 午夜激情成人网| 成人看片人aa| 在这里有精品| 久久精品99久久| 国产亚洲欧美日韩在线观看一区二区 | 亚洲 中文字幕 日韩 无码| 日韩av在线免费观看不卡| 日本三级黄色网址| 国产精品一区不卡| aa一级黄色片| 国产精品无人区| 欧美激情精品久久| 狠狠色狠狠色综合日日五| 亚洲永久精品视频| 欧美草草影院在线视频| 色视频在线观看| xxxx性欧美| 福利影院在线看| 国产精品女主播| 凹凸av导航大全精品| 青青草成人激情在线| 午夜精品亚洲| 日韩一级在线免费观看| 国内精品久久久久影院一蜜桃| 国产乱淫av麻豆国产免费| 国产亚洲成年网址在线观看| 亚洲国产精品久| 色先锋资源久久综合| 国产999久久久| 亚洲色图av在线| 天使と恶魔の榨精在线播放| 日本欧美在线视频| 成人高潮a毛片免费观看网站| 日韩欧美激情一区二区| 精品不卡视频| 不卡的在线视频| 久久天堂av综合合色蜜桃网| 欧美一区二区三区爽爽爽| 91成人网在线| 天天操天天干天天操| 尤物九九久久国产精品的特点| 午夜伦理在线视频| 国产精品免费久久久| 鲁大师精品99久久久| 懂色av一区二区三区四区五区| 久久成人国产| 欧美日韩人妻精品一区在线| 亚洲色图欧美偷拍| 波多野结衣一区二区三区四区| 亚洲第一区在线观看| 国产精品扒开做爽爽爽的视频| 日韩免费观看视频| 9l视频自拍蝌蚪9l视频成人| 中文字幕欧美日韩一区二区三区| 久久综合九色| 天天插天天射天天干| 一区二区三区国产精品| 一级久久久久久久| 最新国产成人av网站网址麻豆| 亚洲精品一区| 精品在线视频一区二区| 99国产精品视频免费观看一公开| 中文字幕色网站| 国产精品网曝门| 国产字幕在线观看| 亚洲欧洲在线看| 亚洲妇女成熟| 久久精品日韩精品| 99精品视频免费| 欧美肉大捧一进一出免费视频| 一区二区三区精品| 国产高清免费观看| 欧美猛交免费看| 另类视频一区二区三区| 少妇高潮大叫好爽喷水| 国产伦精一区二区三区| 91狠狠综合久久久| 欧美日精品一区视频| 一本一道波多野毛片中文在线| 国产精品成人品| 欧美码中文字幕在线| 日韩肉感妇bbwbbwbbw| 中文字幕不卡的av| 亚洲图片视频小说| 久久色免费在线视频| 成人在线分类| 国产乱人伦精品一区二区三区| 国产精品1区2区3区在线观看| 美女视频黄免费| 精品福利在线导航| 国模私拍一区二区国模曼安| 农村寡妇一区二区三区| 日韩精品免费视频人成| 丁香花五月婷婷| 欧美日韩电影一区| 成人影欧美片| 国产精品亚洲一区| 玖玖国产精品视频| 国产福利在线导航| 精品日韩在线观看| 午夜激情电影在线播放| 日韩欧美一区二区在线观看| 免费成人美女在线观看.| 国产色无码精品视频国产| 欧美不卡激情三级在线观看| 黄在线观看免费网站ktv| 欧美一区观看| 国内精品伊人久久久久av一坑| 久久无码精品丰满人妻| 国产视频久久久| 在线免费成人| 国产特级黄色大片| 中文字幕精品三区| 亚洲国产精品二区| 青青久久aⅴ北条麻妃| 爽成人777777婷婷| 中文字幕a在线观看| 在线观看精品一区| 在线观看h网| 日韩精品久久一区| 国产一区二区三区av电影 | 欧美在线综合| 看黄色录像一级片| 亚洲国内精品视频| 色综合一区二区日本韩国亚洲| 丁香花在线影院观看在线播放| 欧美高清在线一区二区| 亚洲精品久久久久久久久久| 国产v综合ⅴ日韩v欧美大片| 欧美~级网站不卡| 国产黄片一区二区三区| 欧美电影精品一区二区| 午夜欧美巨大性欧美巨大|