web-dev-qa-db-ja.com

プログラミングPHP MVC、クラス、またはフレームワークなし:新しい機能を書き換えるか、続行しますか?

私は数年前からプログラミングをしており、その当時(PHPの学習)、クラス、MVCロジック、またはフレームワークを使用してプログラミングする方法を学びませんでした。私は自分の機能を使用して自分の問題を非常にうまく解決していることに気付きました。

8か月前、私は新興企業に採用され、巨大なソーシャルプラットフォームを開発しました。私はここ数か月間ここで働いており、さまざまな複雑な機能(推測で+ 35k行のコード)を備えた巨大なWebサイトを構築しました。フレームワークなし、クラスなし、またはMVCロジックを使用してすべてをコード化しています。これを学ぶ時間がないためです(すばやく移動する必要がありました)。

私はすべてを関数で記述し、コードを適切に文書化/記述し、美しく読みやすいように整理することに多くの労力を費やしています。

しかし、それはisクラス> MVC> Laravel(またはその他の)フレームワークを学ぶための私のリストのトップです。上記のリストを学習してから、すべてのコードを書き直します。これにより、時間を元に戻すだけで済みます。起動時には、迅速に動いており、新しい機能/アイデア/開発の多くの期限があります。

私はこれについて多くの人々と話しました、そして人々は多くの異なることを言います。それは好みの問題だと言う人もいますが、これで先に進むことができます。他の人たちは、それは信じられないほど愚かである、あなたはスケーラブルではない、あなたは深刻な資金を得ることは決してない、あなたは今までプロジェクトに取り組むことができる唯一の人である、あなたは今やめてそれを学び始めるべきである、などと言います。

私は運命ですか?私は失われたと感じます。これについての私の個人的な意見は、それはすでに巨大なシステムであるにもかかわらず、それでもMVPであり、将来のある時点でとにかくコードを書き直すと思います。これは、ベンチャー企業でこのような成功段階にあり、非常に急速に成長している/資金調達しているなどの場合です。

6
user115464

学習OOPは間違いなく価値があります。情熱的な採用可能な開発者は、特に長期的に時間を節約できる場合に限り、常に知識を深めることをいとわないで進んでいます。私は2番目のグループに同意します:

他の人たちは、それは信じられないほど愚かである、あなたはスケーラブルではない、あなたは深刻な資金を得ることは決してない、あなたは今までプロジェクトに取り組むことができる唯一の人である、あなたは今やめてそれを学び始めるべきである、などと言います。

それは少し厳しいですが、現実は、あなたが知っているほど、より多くのスケーリングができます。深刻な資金調達はしばしば誇大宣伝に囲まれており、手続きのコードは残念ながら十分にクールではありません。 OOPそしてフレームワークはそうです。

私は運命ですか?私は失われたと感じます。これについての私の個人的な意見は、それはすでに巨大なシステムであるにもかかわらず、それでもMVPであり、将来のある時点で私たちはとにかくコードを書き直すと思います[...]

大規模な手続き型コードベースは珍しくありません。WordPressを参照してください。 OOPは、手続き上の規則に依存せずにコードを抽象化および整理するのに役立ちます(ただし、MVCフレームワークにはまったく異なる規則のセットがあります)WordPress移行プロセスを開始しました、それは今日も続いています。このような大規模なプロジェクトでは、システムを段階的にアップグレードし、何も壊れないことをテストして、いつまでもリファクタリングを続けるだけで、後でリファクタリングが必要になる新機能を導入できます。 。

しかし、いいえ、あなたは運命ではありません、プロセス全体に少し遅れます。できるときにできることを学ぶ。少ないほうが良いです。新しいプログラミングパラダイムまたは言語を学習するときの学習曲線は、最初は急勾配であることが多いですが、最初のしゃっくりはスムーズに進み、コードにもたらす違いと違いに本当に感謝し始めます。それは他の人があなたのコードを読んだときに作られます。

編集:明確にするために、私は現在のシステムがOOPである必要があること、またはゼロから構築する必要があることを示唆していません。どのシステムでも、ある時点でリファクタリングされる予定であり、以前のシステムとの互換性を解除する必要があるかもしれませんが、プロジェクトで必要な場合は問題ありません。廃止サイクルを設けることもできます。私が提案しているのは、現在のコードや名前空間などをリファクタリングするときに、OOPをゆっくり導入することです。

3
elclanrs

卸売りをMVCフレームワークに移行するのはおそらく遅すぎるでしょう。特に、まだプロジェクトをオンラインにしようとしている場合。

私がお勧めすることは、OOPの学習に集中し、次に既存の機能をクラス構造に移行し始めることです。その後、サードパーティのフレームワークに移行することを決定した場合、多くのコードを再利用できるはずです。

1
GrandmasterB

質問の終了の後にスタックオーバーフローから移動しました。

場合によります。コードがすでにモジュール化されており、マークアップ/ロジックが十分に分離されている場合は、完全に異なるシステムに移植しない方がよい場合があります。既存のビジネスへの影響、および新機能のプロジェクトから開発者を引き離すことがあなたのケースでそれだけの価値があるかどうかを考慮する必要があります。

それを行うためのより良い方法は、ロジックをコードから分離するボルトオンライブラリを見つけ、それを最初は新しいコードにのみ使用することです。次に、時間を見つけたら、古い画面の移植を開始し、完了したらそれぞれの画面をライブにします。その結果、「ビッグバン」でやろうとするのではなく、繰り返し改善することになるため、リスクが少なくなります。

私は大規模なPHP=システムで作業しており、名刺を適切なMVCのようなシステムに移行するのが非常に困難でした。そうしたいと思っていますが、6〜12歳になるでしょう。数か月の開発作業、そして私は個人的にコスト/利益を好意的に見る傾向がありますが、クライアントはそうではなく、もちろんこれらの決定を行うのはクライアント/マネージャーです!

私の場合の解決策は、単純なオブジェクトベースのコントローラーシステムを作成することでした。これは、今後の新しい開発で使用する傾向があります。 Symfony2やLaravelほど素敵ではありませんが、モジュール性と保守性に向けた重要なステップであり、十分です。

とはいえ、オブジェクトをまったく使用しない場合、それは非常に珍しいことだと思います。これらは、アプリケーションを整理するための非常に自然で有用なメカニズムであり、コードベースを改善する方法を決定するときに、これが最初の呼び出しポートになることをお勧めします。

1
halfer

このプロジェクトは特に、完全に書き直すには少し大きすぎるかもしれませんが、それを教訓と考えてください。

MVCフレームワークには多くの目的があります。

  • 多くのボイラープレート(ルーティング、テンプレートなど)を処理します
  • リクエストとレスポンスの間のさまざまなステップを分離して、あらゆる種類の機能を非常に簡単に注入できるようにします。
  • ビューはモデルやビジネスロジックから分離されているため、コーディングのスキルがなくてもサイトを完全に再設計できます。

これはフレームワークなしで実現できますが、そうする意味はありません。彼らは通常あなたに多くの時間と効果を節約します、そしてあなたは絶対にあなたの次のプロジェクトのためにそれらを考慮すべきです。

現在のプロジェクトが保守可能である場合は、多くのリソースを無駄に書き直さずに、作業にゆっくりと移行することを検討してください。投資する価値はありますか?あなただけが知っています。

0

クラスのコードを最初に整理するだけのために、あなたのような大規模なシステムを書き直すことは、それほど悪くはないように見えますが、バグの少ないシステムを用意することによって努力が報われない限り、拡張するのは簡単です。より最適な場合などは、クラスを使用してアプリケーションの拡張機能を作成することを考えることをお勧めします。

ほとんどのフレームワークと大規模なアプリケーションがoopコード編成を支持していることは事実ですが、それは確かに要件ではありません。関数型プログラミング言語、特にocamlを愛することを学んだので、クラスは関数よりも劣っていると私は個人的に感じています。そして、phpが関数とクロージャーのより良い使用法を提供するようになったので、クラスを使用することにはまったく厳しい理由はありません。これはほとんどの人にとって冒涜かもしれませんが、私はそれが事実であると信じています。

クラスには用途がありますが、必須ではありません。クラスの従来の使用法とそれに相当するもの、つまり静的メソッドとインスタンスの使用例をいくつか見てみましょう。

  1. 静的メソッド。

    名前空間を使用すると、静的クラスメソッドと同じ機能を持つことができるだけでなく、さまざまな名前空間を持つメソッドをさまざまなファイルにグループ化できるため、おそらくはるかに柔軟で拡張性があります。

  2. インスタンスの状態。

    クラスのインスタンスには、独自の内部状態が含まれています。これは、OOPを使用する利点の1つとして常に推奨されてきました。クロージャーを使用して同じように同じことを実行することも同様に実行可能であり、他の多くの言語で成功裏に使用され、大きな成功を収めています。

だから、私のアドバイスは、先駆者を維持することです。人々があなたのコーディングスタイルに移行し始めるとき、あなたは私に時間をかけて感謝するかもしれません。

0
Lloyd Moore