26

「モジュール方式でアプリケーションを設計する方法」についてのポインタ、提案、リンク、警告、アイデア、さらには逸話的な説明を探しています。このプロジェクトではPythonを使用しますが、OOPに基づく設計を実装するだけでよいのですが、アドバイスは必ずしもこの言語を参照する必要はありません。

これが私がどこから来たのか、そして私が何を達成しようとしているのかを理解するためのいくつかの文脈です...


私のプロジェクトは、Webサービスを利用し、次のようなさまざまな方法で結果を表示する小さなアプリケーションになります。

  • 通話の結果だけを含む通知ポップアップ
  • アプリケーションのメインウィンドウのタブで、取得した生データからグラフィックがプロットされます
  • さまざまなサービスからの結果が積み重なるメッセージのバッファ(domandに表示)

アプリケーションは無料の(スピーチとしての)ソフトウェアとしてリリースされます。このため、他の開発者がメインアプリケーションの機能を拡張するプラグイン/モジュールを簡単に作成できるようにしたいと思います。コアコード。

この時点で、プラグインは基本的に、プロバイダー、データ操作(存在する場合)、およびデータがユーザーに提示される方法を定義することにより、開発者が新しいWebサービスをアクティブ化できるようにする必要があります

私は強力なモジュラーアプローチを備えたdrupalを使用した開発の豊富な経験がありますが、それは非オブジェクト指向設計にも準拠しているため、Pythonの場合、drupal設計は最適なソリューションではない可能性があります。

これが重要な場合、コアはGNU/Linux用にネイティブに開発されます。

よろしくお願いします!

4

5 に答える 5

13

物事をゆるく結びつけておくようにし、インターフェースを自由に使って助けてください。

関心の分離から設計を始めます。主なアーキテクチャレイヤーは次のとおりです。

  • 問題のあるドメイン(別名、エンジン、バックエンド):実際のすべての作業を行うドメインクラスは、ドメイン知識にドメインの動作を実装させます
  • 永続性:ドメインクラス、データベース/ファイルシステムレイヤーのストレージ管理
  • ユーザーインターフェイス:ドメインクラスと通信するGUI
  • システムインターフェース:他のシステムとの通信。ネットワーキング、Webサービス

ドメインクラスは機能しますが、UIについてはわかりません。永続層は、必要に応じて保存/ロードするのに十分なドメインクラスを認識しています。システムインターフェイスレイヤーは外部システムを抽象化し、テスト中にシミュレーターを背後に接続できるようにします。UIは、最大限の柔軟性を得るために、理想的にはMVCを使用する必要があります。

細かく指摘しなければ、通常、Drupalを優れた建築設計の模範とは見なしません。それはかなり有機的に成長し、システムのアップグレード時の定期的なプラグインの破損によって証明されるように、設計の多くの激変がありました。

また、プラグインインターフェイスを注意深く設計し、それを実行するために複数の異なるプラグインを作成することに関して、MicSimが言ったことをエコーし​​ます。これは、アプリとプラグインがどのように相互作用するかという問題を実際に具体化する唯一の方法です。

于 2009-12-08T11:57:54.630 に答える
9

アプリでいくつかの基本的な機能を提供するので、プラグインとしてすでに拡張可能/交換可能であるはずの部分を自分でコーディングするようにしてください。そうすれば、APIがどのように見えるべきかを最もよく理解できます。

また、APIが優れていることを証明するには、2番目と3番目のプラグインを作成する必要があります。そうすると、最初のプラグインを作成するときに多くの仮定を行ったことがわかります。通常、この2番目と3番目のステップを実行すると、状況は少しクリアになります。

ここで、もう1つのプラグインを作成する必要があります。これは、最後に作成したプラグインが、タイプ、入力データ、およびプレゼンテーション(おそらくさらに別の天気Webサービス)の最初のプラグインに似ているためです。まったく異なるデータを使用して、まったく異なるものを選択すると、APIがまだ調整されすぎていることがわかります。(そうでなければ、あなたは良い仕事をしました!)

于 2009-12-08T11:25:18.033 に答える
2

さて、おそらく最初に始める場所は、座って、プラグインがその目的を果たすために何が必要かを理解することです。

設計では、2つの主要な側面を検討する必要があります。

  • フレームワークはどのようにプラグインからリクエストを渡したり、レスポンスを受け取ったりしますか?
  • どのヘルパークラスまたはモジュールを提供するとよいでしょうか?

そしておそらくまた、これは学習プロジェクトのように聞こえるので。

  • 自分で何を書きたいですか。また、既存のライブラリから何を選んで満足していますか。

APIを設計するときに、いくつかの基本的なプラグインを開発することもお勧めします。設計したものを実際に使用しなければならないという経験により、特定のアプローチが必要以上に困難になっている可能性がある場所を確認できます。

于 2009-12-08T09:25:23.490 に答える
1
  • アプリのAPIを慎重に設計します(優れたAPIを設計する方法と重要な理由
  • モジュールを個別に使用できるすべてのものを作成し、単純なパーツからより大きなパーツをグループ化して構築します(KISS)
  • 繰り返さないでください(DRY)
  • 自分自身と他の人のために、短いドキュメントを頻繁に作成/公開します(オープンソースのマントラ)..。
于 2009-12-08T09:42:57.373 に答える
1

リスナーとサブスクライバーのパターンを調べます。遅かれ早かれ、アプリはコールバックを実装する必要があるほど複雑になります。その制限に達したら、listener-subscriberを使用します(wxPythonに実装があります)。

たとえば、いくつかのモジュールは、いくつかのフィードからの新しいデータを監視する必要があります。一緒にリンクするモジュールは、新しいデータに基づいて、それ自体を更新したい場合があります。

于 2009-12-08T12:06:25.553 に答える