1

設計に関していくつかの考慮事項につながる可能性のある理論的な質問です。POJO をこの再利用可能なクラスに置き換えるとどうなるでしょうか? いくつかの定型コードを回避できるかもしれませんが、どのような問題を引き起こす可能性がありますか?

// Does not include failsafes, guards, defensive copying, whatever...

class MySingleGetterAndSetterClass{

    private HashMap<String,Object> myProperties;

    public SingleGetterAndSetter( String name ){
        myProperties = new HashMap<String,Object>();
        myProperties.put( "name", name );
    }

    public Object get( string propertyName ){
        return myProperties.get( propertyName );
    }

    public Object set( string propertyName, Object value ){
        myProperties.put( propertyName, value );
    }

}
4

3 に答える 3

3

これにより、コードが非常に不安定になります。取得/設定はコンパイル時にチェックされません。一般に、コードはフェイル ファストである必要があり、コンパイル時間は実行できる絶対的な最速です。

比較的安全にするには、至る所でヌルチェック/例外処理を行う必要があり、コード全体で値が見つからない場合をどのように一貫して処理するのでしょうか? それは非常に速く肥大化するでしょう。

于 2013-06-18T02:03:32.983 に答える
3

主な欠点

  • はるかに遅い
  • より多くのメモリを使用します
  • 型安全性が低い
  • よりエラーが発生しやすい
  • 維持するのがより困難
  • より多くのコードを書いたり読んだりする
  • より多くのスレッド セーフの問題 (壊れる方法が増える) と、スレッド セーフにするのがより困難になります。
  • デバッグが難しくなりますが、フィールドの順序は疑似ランダムに配置できることに注意してください。同じ「タイプ」のオブジェクトごとに異なると、読みにくくなります。
  • リファクタリングがより困難
  • コード分​​析ではほとんどまたはまったくサポートされていません。
  • コード補完はサポートされていません。

ところで、いくつかの動的言語は、あなたが提案したことを正確に実行し、これらすべての問題を抱えています。

于 2013-06-18T02:10:28.117 に答える
1
  • コンパイル チェックではありません。
  • ダウンキャストする必要がありますが、これは良くありません。
  • 維持するのが難しい。
  • OOPに対して、

あなたの pojos are classes は、現実世界の何かの抽象化を表しています。プロパティをマップ内に配置する必要があることをよく理解していれば、これは良い設計ではありません。あなたはOOPの使用に反対しています。このように考えると、すべてのクラスを単一の大きな文字列で取得し、それらを位置で検索できます。これは、キーとしてプロパティを持つ辞書のみを使用するよりも優れています。

于 2013-06-18T02:12:13.693 に答える