0

私は現在、ページ テンプレートを OOP に変換しようとしていますが、ナビゲーション クラスについて思いついたことが根本的に正しくないと感じています。

  • これらのメソッドのいくつかは本当に の拡張クラスに属しdrawNavますか?
  • getMenuBar-> generateMenuBar->構造はgenerateMenuItems崩壊しすぎていませんか? だけでgetMenuBar、すべてのコンテンツを から、および に入れるgenerateMenuBar()必要generateMenuItems()がありgetMenuBar()ますか?

クラスとメソッドを呼び出す方法:

$drawNav = new drawNav();

$breadcrumbTrail = $drawNav->getBreadcrumbTrail();
$menuBar = $drawNav->getMenuBar();

コード:

class drawNav { 

            public function __construct() {
                //I’ve not nothing to put here…                                
            }

            public function getMenuBar()
            {
               return $this->generateMenuBar();                          
            }

            public function getBreadcrumbTrail()
            {
                return $this->generateBreadcrumbTrail();                           
            }

            public function getSocialMediaButtons()
            {
                return $this->generateSocialMediaButtons();    
            }

            private function generateSocialMediaButtons()
            {
               //return the HTML code with the social media buttons
            }

            private function generateMenuBar()
            {
               //Generate the HTML containing the menu and social media buttons
               $this->generateMenuItems();
               $this->getSocialMediaButtons();
               //Generate the HTML closing tags for the container for the menu and social media buttons
            }

            private function generateMenuItems()
            {
                //Call to the database and generate each individual menu item and its dropdown
            }

            private function generateBreadcrumbTrail()
            {
                //Generate the HTML containing the breadcrumb trail
                $this->generateBreadcrumbs();
                //Generate the HTML closing tags for the container for the breadcrumbtrail
               }

            private function generateBreadcrumbs()
            {
                //Call to the database and generate the pieces of the breadcrumb trail
            }
}
4

3 に答える 3

6

getMenuBar-> generateMenuBar->構造はgenerateMenuItems崩壊しすぎていませんか?

はい。プライベート メソッドをラップする単一行のパブリック メソッドを 1 対 1 でマッピングする理由はまったくありません。これは、誰のベスト OOP プラクティスのリストにも載っていません。

この奇妙さではなく:

        public function getSocialMediaButtons()
        {
            return $this->generateSocialMediaButtons();    
        }
        // ...
        private function generateSocialMediaButtons()
        {
           //return the HTML code with the social media buttons
        }

あなたは単にこれを行うべきです:

        public function getSocialMediaButtons()
        {
            //return the HTML code with the social media buttons 
        }

パブリック インターフェイス内でプライベート メソッドを組み合わせることができるか心配な場合は、後で簡単にリファクタリングできます。しかし、ほぼ同じ名前のプライベート メソッドを呼び出すことだけを目的とした 1 行のパブリック メソッドを記述するのは、コードの匂いがします。

それ以外の場合、コードは問題ありませんが、注意点が 1 つあります。「ソーシャル メディア ボタンで HTML コードを返す」が外部の HTML テンプレート ファイルをレンダリングしていて、HTML をクラス内にインラインで記述していないことを願っています。バックエンドとフロントエンドのロジックを適切に分離することは、コード部分がどのように構造化されているかよりも重要です。私は、ビジネス/ビュー ロジックをきれいに分離する手続き型コードを、それらを混ぜ合わせた巧妙に作成されたオブジェクト指向コードよりも見たいと思っています。

于 2012-08-29T18:16:36.537 に答える
1

メソッドをどのように分離したかについて、大きな問題はありません。個人的には、クラスメソッドで特定の操作を処理してから、他のメソッドを使用して「ビルディングブロック」メソッドをより複雑な操作にまとめたいと考えています。これにより、たとえば、ブレッドクラム データベースのロジックを変更する必要がある場合に、その 1 つのメソッドのみを変更し、メソッドは他のメソッドから十分に抽象化され、変更する必要がない場所に移動します。

于 2012-08-29T18:19:08.877 に答える
0

あなたが持っているものは大丈夫のようです。

ナビゲーションクラスがあるかどうか疑問に思います。これはすべてそこに追加できるので、またはナビゲーションクラスの拡張として、清潔さのために追加できます。

于 2012-08-29T18:22:22.247 に答える