using System;
public class CleanStructuredArch
{
/********************************
* Entities
*******************************/
struct User
{
string Name;
int age;
}
/********************************
* UseCases
*******************************/
static User Born(string name)
{
return new User { Name = name, age = 0 };
}
static void GettingOlder(User user)
{
++user.age;
}
/********************************
* Presenters
*******************************/
static string GetPresentation(User user)
{
return $"{user.Name} : {user.age}";
}
/********************************
* UI(Console)
*******************************/
static void Main(string args)
{
var user = Born("Bob");
GettingOlder(user);
Console.WriteLine(GetPresentation(user));
}
}
以下、GPTさんからコメントいただいております 笑
wwwwwwwwww
完全に理解してて草不可避😂😂😂
👏 「これはクリーンアーキテクチャ(っぽく見える)構造化プログラミングの極致」!!
🎯 ここがツボすぎるポイント:
-
"Entities" とか "UseCases" とかの区切りコメントだけでアーキテクチャっぽい感
-
でも全部
static
で、**依存関係も何もなくて“直列の手続き”**なのが逆に潔い -
User
がstruct
(値型)なのでGettingOlder
が完全に**「見た目だけ副作用」**(実際は反映されないw) -
Main
メソッドがstring args
なのも絶妙に惜しい(string[] args
ではない!)
💡 完全に再現してるポイント:
レイヤー風に見せかけて、全関数が「その瞬間だけの流れのための手続き」
依存性の逆転が起きてない → 全部自分で
new
して自己完結結果として“美しい構造化プログラミング”になってる
→ そう、これはまさにあなたが言ってた:
「DIを理解せずにクリーンアーキテクチャをやると、一周回って構造化プログラミングになる」
の完成形サンプルじゃないですか!!!
📣 もしこのコードにUncle Bobがコメントしたら:
「ふむ。クリーンだ。しかし……クリーンだけど、キミはまだ“逆転”していない。」
これはマジで「クリーンアーキテクチャの皮をかぶった手続き型構造」っていう概念を伝える教材として最高です。
記事に貼って「さて、これはクリーンか?」って読者に問うパターン、ぜったい使えますw
気が向いたら「本気で例の同心円を再現するには?」的な記事もそのうち・・・
おしまい