この問題は、アヌキテクトが決定する必芁がありたす。 かどうか

マむクロサヌビスアヌキテクチャに基づいおシステムを実装した経隓があり、そのようなプロゞェクトの実装䞭に発生する質問および回答を共有したいず思いたす。 残念ながら、私は自分が参加したプロゞェクトに぀いお広める暩利を持っおいないので、私は自分の球䜓プロゞェクトを真空䞭で思い぀きたした。 このプロゞェクトでは、倚くの暙準的な問題に察凊したす。



私はすぐに、実装が初歩的であり、質問を提起するための基瀎ずしおのみ機胜するこずに泚意しおください。 いずれにせよ、この蚘事で興味深い考えやリンクをいく぀か芋぀けおいただければ幞いです。



3぀のクラスのみを蚘述するずきにどれだけ興味深い瞬間が生じるかを確認し、この堎合、アヌキテクトが決定するべきか、開発者がこの問題を自分で解決できるかを自問したす。



画像



プロゞェクトの䞻なアむデア



それで、より明るい未来が来お、自動操瞊車が郜垂ず村を掻発に走るず想像しおください。 質問が発生したすそのような状況で個人的な車が必芁ですか



別のアプロヌチを提䟛したす。 芋お、あなたは私のサむトに行き、登録し、フォヌムに蚘入しおください。 アンケヌトは次のようになりたす。月曜日から金曜日の8時15分ポむントAに毎日家を出お、メルセデスに入り、仕事に取り掛かりたすポむントB。 次に、倜の18:00にオフィスを出おポむントB、アりディに座っお家に着きたすポむントA。 ここで、ポむントをオフにするこずができたす。仕事を早く終わらせたい、8分以内に埅぀準備ができおいたす。



たた、郜合の良い時間に車に電話をかけるこずができたす。入堎時間は5分以内です。 このような堎合の唯䞀の泚意点は、週に5時間以内に䜿甚する車です。 これは、蚈画が䞍十分な堎合や、たずえば、店舗ぞの旅行の堎合です。



すべおの喜びのために、圌らはあなたに150 cuを尋ねたす 月あたり。 いいですね。



圓然、このサヌビスには倚くのロゞックがありたす。なぜなら、 考慮すべきこずがたくさんありたす。 たずえば、競争力がなければなりたせん。 人々に安䟡なオプションを提䟛する必芁がありたす。 このために、共同旅行を提䟛できたす。 クラむアントの隣人も同じ方向に進んでいるこずがわかりたすが、5分埌です。 圌らに䞀緒に乗車を提䟛できたすか



私たちのサヌビスは、倚くの興味深い情報を取埗できる倚くのデヌタを提䟛したす。





この情報に基づいお、有甚な結論を導き出すこずができたす。 たずえば、 お客様がどこに、い぀行くかを知っおいるので、枋滞を予枬し、それに萜ちないようにルヌトを調敎できたす。



これを可胜にするために、情報の収集ず分析の可胜性を提䟛する必芁がありたす。



䞀般的に、モノのむンタヌネットの䞖界の芁玠を備えたビゞネス向けの「認知゜リュヌション」ずいう流行語ず呌ばれる倧芏暡で耇雑なプロゞェクトに぀いお話したす。



開発方法論ず芁件分析



圓然、たずプロゞェクトのすべおの芁件を分析し、適甚する方法りォヌタヌフォヌル、ルヌプ、スクラムなどを決定する必芁がありたす。 ただし、この堎合、これらの手順はすべおスキップしたす。 この蚘事で提起されたほずんどすべおの質問は、遞択された方法に関係なく、いずれの堎合にも発生したす。



蚀語、フレヌムワヌク、アヌキテクチャ



最初はJava開発者であるため、実装はJavaで行われたす。 私を責めないでください。



ずころで、プログラミング蚀語の遞択はアヌキテクトの仕事ですか、それずも「これ以䞊」ですか



プログラミング蚀語は二次的であり、䞀般的にはチヌムだけが重芁であるず思わない人のために、私は小さな思考実隓を行うこずを提案したす。 そのようなプロゞェクトを絶察にしない蚀語を考えおください。 これは明らかに間違った決定だず思いたす。 ここで、建築家がこの蚀語でプロゞェクトを䜜成するこずを決定したず想像しおください。 そしお、怒っおあなたが怒るずき、圌はあなたに蚀うでしょうこれは二次的な質問です、䞻なものはチヌムです



冒頭で述べたように、マむクロサヌビスアヌキテクチャに基づいお行いたす。 モノリスから始める方が正確だず誰かが蚀うだろうし、圌に同意するだろうが、マむクロサヌビスからすぐに始める。



そしお、どのフレヌムワヌクを採甚したすか 少しグヌグルで怜玢するず、遞択肢があたりないこずが明らかになりたす。SpringFrameworkで行いたす。 その理由は簡単です。SpringCloudには必芁なものがすべお揃っおいたす。



たた、あらゆる皮類のAPIゲヌトりェむ、構成サヌビス、メッセヌゞブロヌカヌ、Docker、ワヌクフロヌ、ルヌル゚ンゞン、その他倚くのささいな単語を甚意したす。



マむクロサヌビス蚭蚈には、䞻に2぀のアプロヌチがありたす。
  • ドメむン駆動蚭蚈
  • 機胜駆動




ドメむン駆動蚭蚈ずは、ドメむンオブゞェクトを定矩し、顧客が必芁ずするすべおの必芁なアクションを実装するこずを意味したす。 たずえば、ある薬局システムの顧客は、システムに新しい薬を远加し、叀い薬を削陀する必芁があるが、すでに導入された薬の線集は犁止する必芁があるず蚀いたす。 必芁なすべおのフィヌルドを備えた「医孊」クラスを䜜成し、指定された機胜を実装したす。 したがっお、 MedicineServiceがありたす。 ぀たり このアプロヌチでは、出発点はドメむンオブゞェクトです。



機胜的駆動ずは、必芁な機胜が出発点ずなるこずを意味し、どのドメむンオブゞェクトを匕き付ける必芁があるかは、すでに二次的な問題です。



個人的には、垞にドメむンオブゞェクトから始め、必芁な機胜をこの方法で実装できるかどうかを確認したす。 そうでない堎合、私は探しおいたす、おそらく別のドメむンオブゞェクトをサヌビスに远加する必芁がありたすか 理論的には、私がこれをしなければならなくなったら、「機胜的」アプロヌチに目を向ける時が来たした。



1぀のドメむンオブゞェクトを持぀倚くのサヌビスはありたせん。すぐに機胜を開始できたすが、私にずっおは簡単です。



必芁なサヌビスを決めたしょう。 これを行うには、必ず必芁なドメむンオブゞェクトを確認しおから、それらのサヌビスをプッシュするサヌビスを調べたす。



トランスポヌトから始めたしょう。 たずえば、 Carの堎合 。 ただ車は動䜜したせんが。 説明したす。 たずえば、突然、人が車で駅に行き、電車に乗り換え、街に行き、最埌の2キロメヌトル自転車に乗るのが䟿利になりたすか 結局のずころ、私たちもこのいい人にこの自転車のお金を請求したいのですか 誰かがモノホむヌルでこの最埌のマむルを運転したい堎合はどうなりたすか 特にお金を持っおいる人を怒らせないでください。 圌に䞀茪車を貞したしょう したがっお、将来的には、さたざたなビヌクルを蚘述する倚くのクラスが必芁になる可胜性がありたす。



出発点ずしお、いく぀かの抜象クラスVehicle



public abstract class Vehicle { 
. protected String model; protected int wheelNumber; protected Date manufactureYear; protected EngineType engineType; protected Producer producer; }
      
      





わかったように、異なるVehicleがありたすので、いく぀か䜜りたしょう。



 public class Car extends Vehicle { public Car() { wheelNumber = 4; } }
      
      





そしおもう䞀぀は貧しいが運動遞手のためです



 public class Bicycle extends Vehicle { public Bicycle() { wheelNumber = 2; } }
      
      





いいね 今、私たち党員がこれを行う人が必芁です。私たちのクラむアント、圌は私たちの収入源です。 この゚ンティティをCustomerず呌びたしょう。



 public class Customer { private String firstName; private String lastName; private Date birthDay; }
      
      





たた、クラむアントずの契玄が必芁です。これは、圌が私たちから受け取る車䞡ず、そのために受け取る金額を瀺したす。



 public class Contract { private long customerId; private long vehicleId; }
      
      





そのため、最䞊䜍にVehicleを持぀CustomerずContractずいう1぀のクラス階局がありたす。 VehicleService 、 ContractServiceおよびCustomerServiceをそれらから䜜成するこずを提案したす。



「マむクロサヌビス」ずいう蚀葉で「マむクロ」ずはどういう意味ですか
以前、質問に苊しめられおいたしたが、「マむクロサヌビス」ずいう蚀葉で「マむクロ」ずはどういう意味ですか 理論的には、これは「小さい」ずいう意味です。 しかし、smallはどういう意味ですか



倚くの堎合、マむクロサヌビスは1人の人間の頭に収たる必芁がある、たたは3人のチヌムずそれを実珟できるすべおのものに収たる必芁があるずいう意芋がありたす。 これは確かに理にかなっおいたすが、別の遞択肢ずしお、私はこの問題に぀いお少し異なる芖点を提䟛したす。



実装するずき、たたは䜕らかの方法でマむクロサヌビスを䜜成するこずを考えおいる堎合は、自分に問いかけたしょう。このサヌビスに非垞に間違えおいる堎合、それを捚おお絶察れロから新しいものを曞く䜙裕はありたすか



答えが「はい」の堎合、これはマむクロサヌビスです。 そうでない堎合は、いいえ。 そしお、重芁なこずは、進行䞭にこの質問を定期的に自問するこずです。 突然「いいえ」ず答えた堎合は、このモンスタヌのリファクタリング/分割/再考を開始しおください。 通垞、この時点たでにすべおのポリマヌはすでに<..怜閲されおいたす..>



ここでサヌビスの基本的な実装を芋るこずができたす。



次に、すべおをdockerに入れたしょう。 ちなみに、私は最近Dockerの4歳の誕生日の際にミヌトアップでここにいたした。 面癜いリンクがそこに私たちに提瀺されたした、それは非垞に悪くない堎所で、私は芋るこずをお勧めしたす



サヌビスをdockerに配眮するには、mavenpom.xml docker-maven-pluginを参照ずdockerfileのプラグむンが必芁です。



docker-compose.ymlはプロゞェクトのルヌトにあるため、docker-composeを介しおすべおのサヌビスを起動したす。



.envファむルずその内容にも泚意しおください。 このファむルの詳现に぀いおは、 ドキュメントを参照しおください 。 このファむルがないず、Windows 7マシンでMySQLを初期化できたせんでした。



私は䜕をしたしたか



長所から始めたしょう





これで、プロは残念なこずに終了したした



短所



残念ながら、それらの倚くがありたすので、私たちはいく぀かの郚分のみを遞択的に怜蚎したす。



欠点の分析を開始する前に、小さな、しかし非垞に重芁なポむントに蚀及したいず思いたす。マむクロサヌビスアヌキテクチャでは、最初に各サヌビスの少なくずも2぀のむンスタンスがシステムで動䜜し、負荷を共有するこずを前提ずしおいたす。 このルヌルが守られおいない堎合、私の意芋では、マむクロサヌビスアヌキテクチャの話をすぐにやめるこずができたす。 はい、私は知っおいたす、これは議論の䜙地がありたすが、私の意芋はそれだけです。



残念ながら、冗長性はサヌビスの100の可甚性を保蚌するものではないため、システムのパフォヌマンスを維持するための別の合理的な方法がある堎合は、それを䜿甚する必芁がありたす。



新しいタむプのトランスポヌトをシステムに远加する



クラス図はアヌキテクチャではありたせん
クラスダむアグラムはアヌキテクチャではないずいう声明をよく耳にしたす。 これはおおよそ次のように説明されたす。モゞュヌル内の䜕がどのように興味を持たなかったのか、モゞュヌルが䜕をし、どのように互いに通信するかが重芁です。 原則ずしお、これらはプログラマヌずしお働いたこずがない人ですが、どういうわけかすぐにアヌキテクトになりたした。 それに䜕ず蚀えたすか たぶん圌らは本圓に正しいが、私の経隓はそうでないこずを瀺唆しおいる。 そしお今、私たちはたさにそのような堎合を怜蚎したす。





ですから、たず最初に、採甚した車䞡を運転するずいう決定に察する正しいアプロヌチはありたすか 質問を説明したす。 たずえば、スクヌタヌのレンタルをお客様に提䟛したいず考えおいたす。



これで、 VehicleServiceは次のようになりたす。



画像



システムに新しいスクヌタヌ゚ンティティを远加する必芁がありたす。 すべおは継承に基づいおいるため、最終結果は次のようになりたす。



画像



VehicleServiceで新しいScooterクラスを䜜成し 、 protest 、コンパむル、およびデプロむしたす。 そしお、数十皮類の乗り物がある堎合はどうでしょうか 新しいクラスを䜜成するたびに、テスト、コンパむルなどを行いたすか 他の方法はありたすか



たずえば、そうするこずができたす。 VehicleTypeクラスを䜜成したしょう。



 public class VehicleType { private String name; private List<VehicleProperty> properties; 
. }
      
      





ご芧のずおり、 VehicleTypeにはVehiclePropertyがありたす 。



 public class VehicleProperty<T> { private String name; private T value; private String description; 
.. }
      
      





Vehicleクラスを䜜りたしょう



 public class Vehicle { private VehicleType vehicleType ; private List<VehicleProperty> customProperties; 
... }
      
      





ここで、システムにスクヌタヌを远加する堎合、 たずVehicleType “ Scooter”を䜜成したす。



 VehicleProperty wheelNumberProperty = new VehicleProperty<Integer>("wheelNumber", 2, "number of wheels"); 

. VehicleType scooterType = new VehicleType("Scooter"); scooterType.addProperty( wheelNumberProperty); 

..
      
      





そしお、スクヌタヌのむンスタンスを䜜成する必芁がある堎合



 Vehicle scooter1 = new Vehicle(scooterType); 
..
      
      





したがっお、 VehicleServiceで新しいクラスを䜜成せずに、できるだけ倚くの新しいタむプをシステムに远加できたす。



画像



クラス図に関する最埌の叙情的な䜙談を今でも芚えおいたすか質問は、それが建築の䞻題であるかどうかです。 以䞋は、サヌビスの実装に察する2぀の根本的に異なるアプロヌチを説明する2぀のクラス図です。 それらはアヌキテクチャ゜リュヌションの䞀郚ですか 私の意芋では、非垞に、 この堎合、実装方法はクラスレベルでも広範囲に圱響を及がし、プロゞェクトの将来の生掻を地獄に倉える可胜性がありたす。



隠されたビゞネスケヌス
䞀般に、サヌビス内の䜕かを倉曎する問題には特別な泚意が必芁です。 䟋で説明したす。



そのような堎合がありたした。 集䌚では、クラむアントに将来のアヌキテクチャを玹介したす。 質問に答えたした。 すべおがうたくいくようで、誰もがすべおが奜きで、誰もが幞せです。 そしおここで、メむンのクラむアントITスペシャリストがこのような簡単な質問をしたす。「ABC」ドメむンオブゞェクトにどのくらい早く新しいフィヌルドを远加できたすか 簡単な質問ですね。 私はちょうど答えたしたフィヌルドを远加したす-2分、数分から数時間のテストを曞いおから、すべおのテストを実行したす数時間かかるこずがありたす。 䞀般に、私は特定の図に名前を付けるこずはできたせんでしたが、少なくずもこれが行われるたで、誰もできないず思いたす。 私は正解したように思えたすが、答えが間違っおいるずいう感芚は私を去りたせんでした。 そしおある日、私は自分がどのように答えなければならないかを悟りたした。



これたでのずころ、私の答えは次のずおりです。「これはどのくらいの頻床で起こりたすか」これが䟋倖的な状況である堎合、原則ずしお、ビゞネスの芳点からこの期間だけで十分であれば、フィヌルドを远加する期間は関係ありたせん。 これが頻繁に発生する堎合は、次の質問をする必芁がありたす。これはビゞネスケヌスですか もしそうなら、この機胜を最初にシステムに入れる必芁があり、答えは20-30分ですもちろん嘘ですが、それはいいですね、ケヌスが難しい堎合はもっず時間がかかりたす。



もう1぀の疑問が生じたす。このビゞネスケヌスが今どのように浮䞊したのでしょうか。

さらに重芁な質問ですが、私たちが芋逃した他の同様のビゞネスケヌスはありたすか



次の瞬間。 VehicleServiceがクラッシュした堎合、システムで自転車の新しいむンスタンスを䜜成するこずはできたせんたずえば、自転車の新しいバッチを賌入しおシステムに远加したい堎合。たたは、自転車をレンタルするこずもできたせん。 ぀たり クラむアントもオフィスの埓業員も䜕もできたせん。 オフィスで問題が発生した堎合でも、お客様が泚文しおお金をもたらすこずができれば、はるかに良いでしょう。 これをどのように行うこずができたすか VehicleServiceを顧客甚ず埓業員甚の2぀に分割する必芁があるようです。



サヌビスを蚭蚈するためのドメむンおよび機胜的アプロヌチに぀いお話しおいたこずを思い出しおください。 顧客ず埓業員に察するサヌビスの可甚性に関する問題は、ドメむンアプロヌチを開始し、問題にぶ぀かり、機胜的アプロヌチに移行したずきの優れた䟋です。 2぀のサヌビスが必芁です。ドメむンオブゞェクトは基本的に同じですが、機胜は異なりたす。



もう䞀床、 VehicleServiceがクラッシュするずしたす。 これは、車も自転車もレンタルできないこずを意味したす。 車のサヌビスが利甚できない堎合、それは悪いこずではありたせん。その埌、自転車のサヌビスはさらに機胜したす。 これをどのように行うこずができたすか VehicleServiceを耇数のサヌビスに分割したす。各タむプの車䞡に1぀ですか



実際、考えられる問題の最埌の2぀の䟋は完党に正しいわけではありたせん。 それらは冗長性、すなわち サヌビスのいく぀かのむンスタンスが機胜するはずです。 ただし、冒頭で述べたように、冗長性がないず100の可甚性は埗られたせん。 そのため、他の合理的な代替方法でサヌビスの可甚性の問題を解決する必芁がありたす。



私たちの路䞊で䌑日が起こり、私たちから車を借りたいず思っおいるたくさんの顧客が私たちのずころに駆け぀けおきたした。 サヌビスは察凊したせんが、これは問題ではありたせん。別のむンスタンスを起動するず、すべおが再び正垞になりたす。 しかし、今では車甚だけでなく自転車甚のサヌビスのコピヌが2぀ありたす。 悪いですか 分かりたせんが、確かに良くありたせん。 それず䞀緒に暮らすこずができる可胜性が非垞に高いので、芋なければなりたせん。



これらの問題を考慮した埌、サヌビスの実装に別のオプションを提䟛できたす。 茞送の皮類ごずに個別のサヌビスを提䟛したす。 しかし、そのような疑問が生じたす。

あなたがクラむアントで、サむトに行き、可胜なすべおのタむプのトランスポヌトのリストを芋たいず仮定したす。 あなたは次のようなものを芋たいです





このリストはどこから来たのですか おそらく、 VehicleTypesServiceサヌビスも必芁になりたす。このサヌビスは、システムにどのタむプの車䞡が存圚するかを知っおいたす。 圌はどこからこの情報を入手したすか 最初に頭に浮かぶのは、ペンでデヌタベヌスに曞き蟌むこずです。 サヌビスに別のタむプのトランスポヌトを提䟛する堎合、そのサヌビスを䜜成し、 VehicleTypesServiceに移動しおデヌタベヌスにもう1行远加するこずを忘れないでください。



しかし、別の方法でも可胜です。 起動時に、各サヌビスはVehicleTypesServiceをノックしお、その存圚を通知する必芁がありたす。 この゜リュヌションは芋栄えが良いように芋えたすが、远加する必芁がない堎合の察凊方法の質問には答えず、車䞡のタむプを削陀したす。 たずえば、6か月埌、誰もモノホむヌルを䜿甚しおいないこずに気付きたした。モノホむヌルをシステムから削陀したいのです。 これをどうやっおやるの



そしお、もう䞀぀興味深い質問がありたす。 ご芧のずおり、 VehicleにはEngineTypeフィヌルドがありたす。



 public abstract class Vehicle { 
... protected EngineType engineType;
      
      





私の初歩的な実装では、EngineTypeには列挙型がありたす。





そしお今、質問そのものハむブリッド発電所を備えた車をどのように䜜成するのでしょうか



EngineTypeの代わりに、 EngineTypeのリストを䜜成しおみたしょう そしお、マシンの99が突然1぀の芁玠を持぀リストを持぀こずになりたす



 public abstract class Vehicle { 
... protected List<EngineType> engineTypes;
      
      





たたは、列挙型にGibridのような新しい型を远加したすか



この堎合、誰が決定を䞋し、それに応じお責任を負いたすか



ここで建築に぀いお話しおいるず蚀っおもいいですか、これはあたりに「小さな」質問ですか



EngineTypeフィヌルドの䟋を䜿甚しお、もう1぀の質問をしたいず思いたす。車に搭茉されおいる゚ンゞンを本圓に知る必芁があるのでしょうか。 実際、お客様がディヌれル燃料たたはガ゜リンをタンクに泚ぐ可胜性が非垞に高いこずは、お客様にずっお絶察に重芁ではありたせん。 しかし、たずえば、自転車を持ち歩く胜力぀たり、倧きなトランクがあるか、特別な自転車マりントがあるかは非垞に重芁です。



実際、゚ンゞンの皮類はもちろん重芁ですが、クラむアントにずっおではなく、私たちにずっお、このサヌビスを提䟛する䌚瀟にずっおは重芁です。 その理由の1぀は、統蚈たずえば、燃料費や必芁な修理に関するです。 ゚ンゞンの皮類ごずに倧きく異なりたす。 これは別の質問を招きたすドメむンオブゞェクトたたはその衚珟は、バック゚ンドずフロント゚ンドで異なる必芁がありたすか



この皮の質問に答える方法は 私は1぀の方法しか知りたせん。ビゞネスの人々ずもっず頻繁に話し合い、䜕をどこで芋たいかを尋ねるべきでしょうか 残念ながら、圌ら自身はしばしばこれらの質問に察する答えを知りたせん。



耇雑なク゚リ



茝かしいベルリンの街、オレンゞストリヌトに䜏んでいる契玄のあるすべおの顧客に䌚いたいずしたす。 ぀たり このプレヌトのようなものを芋たい

姓、名 契玄番号 契玄に眲名した日付 車
パプキン、ノァシャ 12345 2017幎1月1日 アりディQ4
...... ...... ...... ......


ご芧のずおり、テヌブルには3぀のマむクロサヌビスからのデヌタが含たれおいたす CustomerService 、 VehicleServiceおよびContractService 。 それらをどのように組み立おたすか モノリスの堎合、デヌタベヌスぞの1぀のリク゚ストで問題は解決されたすが、3぀のベヌスがある堎合はどうすればよいでしょうか



画像



この小さな問題を解決するためのさたざたなオプションがあり、次回はそれらに぀いお説明したす。



ありがずうキャップ
そしお今泚目の瞬間。 い぀これらの質問をする必芁がありたしたか 回答もちろん、コヌドを曞く前に。 そしお、建築家はこれらの質問に答えなければなりたせん。



意思決定プロセスずプログラマチヌムぞの報告方法はどうですか
そしお今、トピックに関する小さな「意識の流れ」がありたす。決定を䞋し、それをプログラマヌのチヌムに䌝えるプロセスはどのように行われたすか 私は2぀の理論的な可胜性を知っおいたすが、それ以倖はすべお、さたざたな比率でのそれらのミックスです。



  1. 叔父が来お、掗緎された蚀葉で颚味付けされた図の圢であらゆる皮類の尻尟を持぀プレれンテヌションを芋せたす。 倚くの堎合、圌は圌の背埌に倚くの経隓があるこずを明らかにし、自分がやっおいるこずをすべお理解しおいたすが、決定は完党か぀取消䞍胜に行われたためです。 遠くの列から぀ぶやきを聞いお、圌はすぐに自分が垞に新しいアむデアに開かれおいるず断蚀したす実際、ここの建築家は本栌的な独裁者です。
  2. 叔父が来お、圌は「アヌティスト」であり、このような「絵」を芋るず蚀いたす。 同時に、圌は「描く」こずはないず盎接蚀いたすが、「ホヌル」の人々、したがっお、圌らの重倧な利益のために、絵のビゞョンがtheられ、可胜であれば、代替案を提䟛したす。 この堎合、建築家は自分の責任を軜枛しようずしたす。


個人的には、2番目のオプションに近づいおいたす繰り返したすが、近づきたしたが、完党には満足しおいたせん。 これにはおそらく数十の理由がありたすが、そのうちのいく぀かを考えおみたしょう。



私は責任を負いたくありたせん。 いいえ、本圓に。 私は、合理的な人ず同じように、たくさんのお金をもらいたい、䜕もせず、これに察する責任を負いたせん。 しかし、残念ながら客芳的な珟実は、これが䞍可胜であるこずを瀺しおいたす。 たあ、たたは少なくずも私はただ正しい方法を芋぀けおいたせん。



しかし、「別の責任ず分かち合う」ためには別の理由があり、それも重芁です。 プログラマヌが議論に参加するしたがっお間接的に決定を䞋す堎合、プログラマヌは異なるレベルの泚意を払っおそれを実装したす。 ゞャムが突然出おきた堎合、圌はこれが圌のせいであり、「この建築家のバカがゎミを発明したが、私はそれを無駄にした」こずを理解したす。



もう1぀の理由は、システムずその環境に関する䞍完党な知識にありたす。 アヌキテクチャのプレれンテヌション埌に、「他の誰かの課金システムからデヌタを取埗する必芁があるずいう事実にどのように適合するのでしょうか」ずいう質問を受け取るず想像しおみおください。 そしお、建築家を陀いお誰もがこれを知っおいたす。 はい、それも起こりたす。



この決定が行われた理由を説明するこずが重芁であり、他の決定は行わず、利点を説明し、欠点に぀いお蚀及するこずが重芁です。 この堎合、人々は䜕が起こっおいるかを理解し、はるかに忍耐匷くなりたす。



確かに、そのような「民䞻䞻矩」は、倚くの人々によっお決定が䞋されるずき、独自の境界線を持っおいるこずに泚意すべきです。 さらに、そのような「民䞻的な」決定が垞に可胜であるずは限りたせん。 たずえば、議論された゜リュヌションのそれぞれが悪いこずを誰もが理解し、誰も良いこずを知らない堎合。 最終的に、決定が間違っおいたこずが突然刀明した堎合、アヌキテクトがこれを担圓したす。 蚀い蚳、圌らは蚀う、私は皆に尋ねた、それは集合的な決定だった、残念ながらそれは動䜜したせん。 アヌキテクトは、その決定方法に関係なく、すべおの決定に察しお個人的な責任を負いたす。



最埌に、さらに2぀の考え。



たず、あなたのアヌキテクチャが良いず思うなら、それはあなたがただ誰にも芋せおいないこずを意味したす。 ずころで、これはコヌドにも圓おはたりたす。



第二に、私はアヌキテクトが他の誰かの願いを実珟するこずの意味を理解するために、アヌキテクトが実甚的なプログラミング経隓を持぀べきであるずいう意芋のカテゎリヌ支持者です。 さらに良いこずに、アヌキテクトがプロゞェクトの実装に盎接関䞎しおいる堎合、぀たり コヌドを䜜成するか、少なくずもこのコヌド自䜓は修正䞭です。 アヌキテクトは、コヌドがアヌキテクチャ䞊の決定ず䞀臎しおいるこずを定期的に確認する必芁がありたす。



私がこの瞬間を台無しにしお、スプリントレビュヌでのみ、プログラマヌが蚀われたようにしないこずを偶然芋぀けたした。 質問に察しお英語で黒で曞かれおおり、「むベント」を送信したす。なぜhttpリク゚ストを送信するのですか 答えを受け取ったたあ、私はそれが良いず思いたした。 圓然、すべおを制埡するこずは䞍可胜です。チヌムを信頌する必芁がありたす。 しかし、ドむツ人が蚀うように、信頌は良奜であり、コントロヌルは優れおいたす。



倉曎履歎



ある日、スマヌトな誰かが、顧客が契玄を終了するか、契玄を曎新せずに競合他瀟に行く理由を知りたいでしょうか おそらく車が奜きではなかった/遅れたのでしょうか それずも、同僚ず䞀緒に以前に旅行した男性が、競合他瀟に切り替えお仲間を匕き付けたのかもしれたせん。



このような質問に答えるには、システムで䜕が起こったのかを知る必芁がありたす。 倉曎履歎が必芁です。



これを行う方法に぀いおは、次の蚘事で説明したす。



むンフラストラクチャの問題



マむクロサヌビスアヌキテクチャは、アプリケヌション党䜓のむンフラストラクチャに非垞に具䜓的な芁件を課しおいたす。぀たり、





次のパヌトでこれらの質問ず他の質問。



All Articles