关于python:Django中基于接口和基于API的编程

Interface-Based and API based programming in Django

我在网上搜索过这个问题。还有一篇文章已经有了相同的标题,但并没有真正描述实际的问题。所以我没有找到正确的解决方案。

我正在开发非常大的项目。因此,绝对有必要将其拆分为多个层或组件,或者您想称之为什么。

每一层都公开了一些功能。对于每一层来说,如何实现它并不重要(因为这在大型项目中经常发生变化),但重要的是,我们如何调用功能以及它返回给我们的是什么=>合同!

如果我们有两层,一层是关于TransactionService,另一层是BankService,那么BankService是一个高于TransactionService的层,将使用TransactionService。TransactionService将只执行一个事务:

1
TransactionVO doTransaction(clientFromVO, clientToVO);

还有另一层可以做额外的东西……TransactionVO不是模型类!它们是值对象,因此服务的实现不会暴露于层外部。在Java中,我们可以通过以下方式实现:

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

实施方式如下:

1
2
3
4
5
public class TransactionServiceImpl {
   public TransactionVO doTransaction(clientFromVO, clientToVO) {
     // implementation
   }
}

因为我们预先定义了接口,所以我们有一个契约,其中说明了每个服务的外观(如果没有实际的实现,TransactionServiceMimpl还不需要存在)。

因此,两个团队可以在每一层上同时工作,并且可以模拟实现。我想知道怎样在姜戈实现这个目标!为每一层创建一个RESTAPI是很简单的事情(要花费大量的开销、性能问题等),那么对于那些在非常大的项目上有经验的人来说呢?


Python没有与Java相同的"接口"。相反,这里有"duck-typing"——其中"interface"是由暴露的行为暗示的。这个问题的答案(如何处理python中的"duck-typing")。应该解决这方面的一些问题。

使用类似于python的动态语言,如果您想在实现类之前定义它的行为,可以提前编写一个测试用例。如果您不熟悉Python中的测试驱动开发,可以从阅读本文开始。

有许多模拟库可用于Python。这是一个例子。


似乎python没有提供现成的。但是有一种叫做ABC模块的东西:

我引自http://www.doughellmann.com/pymotw/abc/"通过定义抽象基类,可以为一组子类定义一个公共API。在第三方将要提供实现的情况下,此功能尤其有用…"

这不是一个完美的解决方案,但它提供了一些我需要的东西。下面的评论让我这样说:Python中的Java抽象/接口设计值得一提;