2019年11月11日
最近、SOLIDの原則について考えていて、その有用性に疑問を感じている。 SOLIDの原則は曖昧で、範囲が広すぎて、混乱を招き、場合によっては完全に間違っている。しかし、これらの原則の動機は正しい。問題は、ニュアンスの異なる概念を簡潔な文に落とし込もうとすることにあって、翻訳の過程で価値の大部分を失っているのだ。 これはプログラマーを間違った道へと導いてしまう(私にとっては確かにそうだった)。
おさらいとして、SOLIDの原則は以下の通りである:
2019年11月11日
最近、SOLIDの原則について考えていて、その有用性に疑問を感じている。 SOLIDの原則は曖昧で、範囲が広すぎて、混乱を招き、場合によっては完全に間違っている。しかし、これらの原則の動機は正しい。問題は、ニュアンスの異なる概念を簡潔な文に落とし込もうとすることにあって、翻訳の過程で価値の大部分を失っているのだ。 これはプログラマーを間違った道へと導いてしまう(私にとっては確かにそうだった)。
おさらいとして、SOLIDの原則は以下の通りである:
https://github.com/Versent/saml2aws をベースに一部修正
winget install saml2aws
.NETは、Microsoftによる統合的なエコシステム管理により、標準ライブラリが充実し、フレームワーク間の整合性が比較的高く保たれています。しかし、プラットフォームの近代化とクロスプラットフォーム化を推進する過程で、時には破壊的変更を伴う進化を遂げてきた歴史も持ちます。
.NET Framework時代: この時期はバイナリ互換性が重視されました。しかし、依存関係の管理には課題がありました。単一のアプリケーションが参照する多数のライブラリ間で、推移的依存のバージョンが異なると競合が発生し、開発者は「bindingRedirect」という設定を手動で調整する必要がありました。これは複雑で間違いやすい作業でした。
.NET Core / .NET 5+ 時代: クロスプラットフォーム対応とパフォーマンス向上を目指した.NET Coreの登場により、APIの整理やアーキテクチャの刷新が行われました。この移行期には以下のような互換性の課題が顕在化しました:
| open Falco | |
| open Falco.Routing | |
| open Microsoft.AspNetCore.Builder | |
| let endpoints = | |
| [ get "/weather" WeatherForecast.getRandom | |
| get "/" (Response.ofPlainText "Hello World!") ] | |
| [<EntryPoint>] | |
| let main args = |
| using System.Collections; | |
| using System.Text; | |
| var xs = ConsList<int>.Create([7, 8, 9, 10]); | |
| var ys = ConsList<int>.Create([0, 1, 2, 3]); | |
| var product = | |
| from x in xs | |
| from y in ys | |
| select $"{x * 10 + y}"; |
| type Cont<'a, 'r> = { runCont: ('a -> 'r) -> 'r } | |
| module Cont = | |
| let toCont c = { runCont = c } | |
| let runCont { runCont = c } = c | |
| let return' a = toCont (fun k -> k a) | |
| let (>>=) { runCont = c } f = | |
| toCont (fun k -> c (fun a -> runCont (f a) k)) |
| using NetVips; | |
| if (ModuleInitializer.VipsInitialized) | |
| { | |
| Console.WriteLine( | |
| $"Inited libvips {NetVips.NetVips.Version(0)}.{NetVips.NetVips.Version(1)}.{NetVips.NetVips.Version(2)}"); | |
| } | |
| else | |
| { | |
| Console.WriteLine(ModuleInitializer.Exception.Message); |