MVC の「アーキテクチャ パターン」を学びたいが、Rails や Django のようなフレームワークにはまだ飛び込みたくない。まず概念を理解し、現在慣れ親しんでいる環境 (たまたま PHP/HTML/CSS/MySQL) で簡単なコードを書きたいと考えています。私は多くの異なる言語を理解しているので、PHP に基づくチュートリアルは必ずしも必要ではありません。また、フレームワーク、API、またはライブラリをインストールする必要はありません。MVC で考える方法を学び、それを自分のプロジェクトに適用したいだけです。助言がありますか?
5 に答える
ほぼすべてのフレームワークで MVC の実行方法が異なるため、さらに混乱する可能性があります。MVC の一般原則は非常に単純です。「モデルは状態です。ビューはモデルに反応します。コントローラーはビューに反応します。コントローラーはモデルを変更します」。モデル、ビュー、コントローラーはコンセプトです。クラス、クラスの束、XML 構成ファイルを含むクラスのインスタンス、名前を付けます。
私は実際にそれが基本原則をカバーしていると思います。フレームワークがなければ、先に進むことはできません。重要なのは、特定のフレームワークがモデル、ビュー、コントローラー、およびそれらの相互作用をどのように定義するかです。
MVCは基本的に、コードをデータを処理するモデル、データを表示するビュー、およびモデルからビューにデータを渡すコントローラーに分割するだけです。
APIやフレームワークが必要なわけではなく、コードを分割する方法にすぎません。多くのフレームワークがそれを使用する理由は、それが非常に単純な概念であり、多くのことにうまく機能し(Webページに完全に適合します)、かなり柔軟性があるためです(たとえば、Railsを使用すると、ビューまたはモデル/コントローラーですべてを実行できます、必要に応じて..)
MVC構造化Pythonスクリプトの例のPythonでの簡単な例。必ずしも「ベストプラクティス」ではありませんが、機能し、かなり単純です。
class Model:
def get_post(self, id):
# Would query database, perhaps
return {"title": "A test", "body": "An example.."}
class Controller:
def __init__(self):
self.model = Model()
self.view = View()
def main(self):
post = self.model.get_post(1)
self.view.display(post)
class View:
def display(self, item):
print "<h1>%(title)s</h1>\n%(body)s" % item
c = Controller()
c.main()
Sander の回答に加えて、ほとんどのフレームワークはフロント コントローラーとMVCを混同していると思います。これらは実際には 2 つの完全に別個の概念ですが、多くの場合、両方ともフレームワークに存在します。だから気をつけてください。
遅いことはわかっていますが、後で同じ質問をする人が来ると確信しています.
上記の非常に優れたコード例は、次のように記述したほうがよいと思いますが、YMMV:
#!/usr/bin/python
class Model:
def get_post(self):
return {"title":"A test","body":"An example.."}
class View:
def display(self,items):
print 'Title:',items['title'],'\n'+'Body:',items['body']
class Controller:
def __init__(self):
self.model=Model()
self.view=View()
def main(self):
post=self.model.get_post()
self.view.display(post)
mvc=Controller()
mvc.main()
これは、python/php で非常に役立つ継承を使用した別の例です.....
#!/usr/bin/python3
class Control:
def find(self,user):
return self._look(user)
def _look(self,user):
if user in self.users:
return self.users[user]
else:
return 'The data class ({}) has no {}'.format(self.userName(),user)
def userName(self):
return self.__class__.__name__.lower()
class Model(Control):
users=dict(one='Bob',two='Michael',three='Dave')
class View():
def user(self,users):
print(users.find('two'))
def main():
users=Model()
find=View()
print('--> The user two\'s "real name" is:\n')
find.user(users)
if __name__=="__main__":
main()
これが理にかなっている場合は、準備ができたら django にアクセスしてください。これが理にかなっている場合は、無料の本を読んでください. ただし、Django はこれらのパラダイムを介して構築および使用されるため、Django を使用する前に OOP および MVC パラダイムについて知ることができなければなりません。
複雑ではないことがわかるように、これはコードを整理するための多くの方法の 1 つにすぎません。
MVC の主な利点は、関心の分離です。コードを書くとき、注意を怠ると、大変なことになる可能性があります。したがって、モデル、ビュー、およびコントローラーを異なる「サイロ」に配置する方法を知ることで、長期的に時間を節約できます。どんな戦略でもいいです。
だからここに私のものがあります:
- モデルは、プロジェクト ツリーの /lib の下にあるファイルです。
- ビューは、プロジェクト ツリーで .html で終わるファイルです。
- コントローラーは <form> アクション属性の URL です