1

いくつかのメソッドを含むクラスがあり、そのうちの少なくとも 1 つはかなり複雑な性質のものであるとします。

class Example {
    public function Example()
    {
    }

    private function complexFunction():void
    {
        //Do this
        //And do that
        //And of course do that
        //and do not forget that
    }

    private function otherImportantFunction():void
    {
        //Do something
    }

    //[...]
}

"complexFunction()" はかなり長くなり、少し複雑になりました。したがって、読みやすさを向上させるには、"complexFunction()" を小さなサブ関数に分割することをお勧めします。私は通常、次のようにします。

class Example {
    public function Example()
    {
    }

    private function complexFunction():void
    {
        doThis();
        doThat();
        andOfCourseDoThat();
        andDoNotForgetThat();
    }

    private function doThis():void
    {
        //Do This
    }

    private function doThat():void
    {
        //Do That
    }

    private function andOfCourseDoThat():void
    {
        //And of course do that
    }

    private function andDoNotForgetThat():void
    {
        //And do not forget that
    }

    private function otherImportantFunction():void
    {
        //Do something
    }

    //[...]
}

しかし今では、このクラスはすでに "complexFunction()" 内で一度呼び出されることを唯一の目的とするマイナーな関数に溺れています。この「分割」をもう少し頻繁に行うと、これらすべてのヘルパー関数間で重要なメソッドを見つけるのが難しくなります。

少なくともこれは私に常に起こっていることであり、明快さは本当に苦しんでいます. そのジレンマを解決する方法を知っていますか? これを処理する方法または「ベストプラクティス」は確かにありますか? 関数をグループ化する方法、またはその目的のためにまったく新しいクラスを作成することなく、マイナーなものを上位のものに従属させる方法を夢見ています。それとも、そのようにされていますか?

4

3 に答える 3

0

1 つの大きな関数を複数の関数に分割するのは正しいことです。AddOne()代わりに のようなものではない場合value++。特に、おそらくより頻繁に繰り返す関数は役に立ちます。

クラスが複数の関数 (または長い関数) でいっぱいになっている場合は、クラスの機能を再考することをお勧めします。クラスが 1 つの科目に向けられるようにしてください。たとえば、クラスをユーザー関連にすることをお勧めします。ユーザーの作成や削除などはそこで行うことができます。ユーザーが所有する車などとのマッチングもそこで行うことができます。ただし、車を保存または削除する関数を User クラスに含めないでください。別のクラスのためにそれを保存します。

その場合、Example-class には User-class と Car-class のインスタンスがあります。次のようになっていれば、効率的にプログラミングできています。

class Example {
    function Example()
    {
    }

    function complexFunction():void
    {
        Car newCar = new Car("KK-E8", Color.Red, true);
        carManager.Add(newCar);
        User newUser = new User("Moritz", "Krohn", Country.Germany, true);
        userManager.Add(newUser);
        newUser.addCar(newCar);
        ...
    }

物事を整理しようとしても、一部のクラスは大きくなる傾向があります。それは決して悪いことではなく、長い関数でもありません。コードをあまり繰り返さないようにし (そのための関数を作成する)、互いに関連するものを別々のクラスに保持するようにしてください。

于 2013-05-03T12:56:41.430 に答える