[過去ログ]
Rust part24 (1002レス)
Rust part24 http://mevius.5ch.net/test/read.cgi/tech/1716759686/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
732: デフォルトの名無しさん [] 2024/07/10(水) 22:01:49.20 ID:HryWiaEt >>721 「インタフェースを定義し、それに基づいて実装する」という設計なら問題ないのだけど、 これは「あるクラスに依存していたコード群が新しいクラスでも動くようにするため」という発想になっており、大規模な開発だとこのやり方はだいたい失敗するよという話 例を書きづらいけど、例えば「A社製の装置を制御するアプリ」があったとして、 新しく「B社製の装置も制御できるようにする」という追加の開発案件があったとする。 この時点ではまだADeviceControllerは抽象化されておらず、A社装置の仕様に強く依存したクラスであるとする。 これを「ADeviceController が持つメソッドを IDeviceController として取り出し、それを BDeviceControllerにも実装させる」とすると確実に事故る。 「B社装置にだけある機能Xを呼びたい」「A社装置にあった機能YがB社装置にはない」といった違いを吸収しきえれず、インタフェースがぐちゃぐちゃになったり、「呼んでも何もしない」とかの形で誤魔化したり、呼び出し元でサブクラスの判定が必要になったりする こうならないようにするには a. 具体的な機器に依存しない、機器の振る舞いを適切に抽象化したインタフェースを定義する b. 代数的データ型を使う という方法があり、 Rust では b. の方法も使いやすいので、個人的にはそこが良いなと思う http://mevius.5ch.net/test/read.cgi/tech/1716759686/732
737: デフォルトの名無しさん [sage] 2024/07/10(水) 23:21:18.85 ID:visgGGe9 >>732 それは共通インターフェースと特定装置にしかないインターフェースをそれぞれ別で用意すべきだと思う 拡張メソッドや拡張トレイトも活用する ただA社装置もB社装置も1つの共通したコードで扱うなら サブクラス判定ではないにしても呼び出し元での分岐は何かしら必要 http://mevius.5ch.net/test/read.cgi/tech/1716759686/737
740: デフォルトの名無しさん [sage] 2024/07/11(木) 00:30:41.75 ID:sJ7PGs8/ >>732 一般的に何らかの上位層と下位層があるときに Rustではその界面にtraitを置いて 上位層はそのtraitを利用する側 下位層はそのtraitを実装する側 とSILIDのDIP (Dependency Inversion Principle)にするのがそのa.だね もしクラスでやるときは抽象化を徹底した上で色んな注意が必要になるところ Rustは自然にコーディングできてありがたいね http://mevius.5ch.net/test/read.cgi/tech/1716759686/740
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.032s