1

この問題についてウェブを検索しました。また、同じタイトルの投稿が既にありますが、実際の質問を実際には説明していません。だから私は正しい解決策を見つけていません。

私は非常に大規模なプロジェクトを開発しています。したがって、それをいくつかのレイヤーまたはコンポーネント、または任意の名前に分割することが絶対に必要です。

各レイヤーはいくつかの機能を公開します。各レイヤーについて、それがどのように実装されるかは重要ではありません (これは大規模なプロジェクトでは頻繁に変更されるため) が、重要なのは、機能を呼び出す方法とそれが返すもの => コントラクトです!

TransactionService と BankService に関する 2 つのレイヤーがある場合、BankService は TransactionService より上位のレイヤーであり、transactionservice を使用します。transactionService は単にトランザクションを実行します。

TransactionVO doTransaction(clientFromVO, clientToVO);

そして、追加のものを行う別のレイヤー.. TransactionVO はモデルクラスではありません! それらは値オブジェクトであるため、サービスの実装はレイヤーの外部に公開されません。Java では、次の方法でこれを実現できます。

public interface TransactionService {
   TransactionVO doTransaction(clientFromVO, clientToVO);
}

実装は次のようになります。

public class TransactionServiceImpl {
   public TransactionVO doTransaction(clientFromVO, clientToVO) { 
     // implementation 
   }
}

インターフェースを事前に定義しているため、各サービスがどのように見えるかを示すコントラクトがあります (実際の実装がなくても、TransactionServiceImpl はまだ存在する必要はありません)。

そのため、2 つのチームが各レイヤーで同時に作業でき、実装のモックを作成できます。Django でこれを実現する方法を知りたいです。各レイヤーに REST API を作成することは単純に完了していません (多くのオーバーヘッドやパフォーマンスの問題が発生します..)。

4

2 に答える 2

1

Python には、Java と同じ意味での「インターフェース」がありません。代わりに、「ダックタイピング」があります。「インターフェイス」は、公開された動作によって暗示されます。この質問 ( How to handle "ducktyping" in Python? ) の回答は、これに関するいくつかの問題に対処する必要があります。

Python のような動的言語では、実装前にクラスの動作を定義したい場合は、事前にテスト ケースを記述します。Python でのテスト駆動開発が初めての場合は、これを読むことから始めることができます。

Python で使用できるモック ライブラリは多数あります。これは一例です。

于 2012-10-29T15:57:37.583 に答える
0

Pythonはこれをすぐに提供していないようです。しかし、abcモジュールと呼ばれるものがあります:

http://www.doughellmann.com/PyMOTW/abc/から引用します実装を提供するつもりです...」

これは完璧なソリューションではありませんが、必要なもののいくつかを提供します。次のコメントは私にこれをさせてくれました: Pythonでの Java 抽象/インターフェース設計 したがって、言及する価値があります ;)

于 2012-10-30T09:36:48.637 に答える