私はRubyコーダーです。私にとって、Monkeypatchingは、実行時に外部プロジェクトのクラスまたはモジュールメソッドを変更することです。私が興味を持っているのは、その素敵な機能の乱用からあなたを守るための、あなたがどのような仕組みを持っているかです。私が遭遇したいくつかのシナリオでは、Monkeypatchingが私に噛まれています。SmalltalkはどのようにMonkeypatchingを扱いますか?
スモールトークはまったく分かりませんが、その言語はRubyよりずっと前です。私はSmalltalkがこれらの問題のいくつかを解決したかどうかを調べるためにいくつかの調査を行ったが、Googleではあまり見つけられなかった。だからここで私は彼らの知恵を分かち合うことができればSmalltalkersを求めています。
シナリオA:バグ固定競合
プロジェクトAとBは、CプロジェクトCは、バグを有するプロジェクトに依存します。プロジェクトAとBのリリースにプロジェクトCの修正が含まれています。
コードでプロジェクトAとプロジェクトBが使用されている場合、どのようにしてパッチが競合しないのでしょうか?
シナリオB:
プロジェクトCを固定古いバグが彼らのプロジェクトの固定マイナーバージョンをリリースします。
プロジェクトAを読み込むと、パッチが適用され、破損する可能性がありますか?私は、コードが修正されている場合にパッチをロードしないなど、いくつかのメカニズムがあるかどうかを知ることに興味があります。
シナリオC:矛盾の拡張
プロジェクトAとBの利用プロジェクトCのFooクラス。両方ともFooにユーティリティメソッドを追加します。#toDateなど。 AのtoDateバージョンは日付文字列を返し、Bの1つはDateオブジェクトを返します。
両方のプロジェクト(C depを使用)を読み込むと、競合を警告/防止するメカニズムはありますか?または、メソッドの間違った期待のためにランタイムがエラーをスローするまで待たなければなりませんか?質問更新の答えを読む
について
、私は私の質問があまりにも広範かつ曖昧だった実現しています。だからここに書き直したバージョンです。
本当に問題をモンスキッチする能力はありますか? – CookieOfFortune
あなたのmonkeypatchingに対するあなたの批判は、かなり離れているようです。最初のクラスの設計よりも漏れの多い抽象化につながる、Monkeypatchingに固有のことは何もありません。また、他のコードよりも本質的に「無謀」でもありません。オブジェクトを別のファイルに分割することは正しいですが、管理可能なモジュールを持つことは良いことだと主張する人もいますが、Objective-Cでは関連する機能をグループ化することをお勧めします。おそらく、あなたの問題は言語機能よりもコーダーの方が多いでしょう。 – Chuck
どのようなケーでも、別々のファイルに分割するという全体の考え方は間違っています。 smalltalkはそんなことはしません。 –