当前位置: 首页 > 面试题库 >

我的内部API类应该全部放在一个包中吗?

乜飞航
2023-03-14
问题内容

我正在努力打包一个供公众使用的API。因此,我试图限制只公开给我希望公开和可支持的方法。当然,在此之下有许多受限的访问方法。

麻烦的是,我有很多内部代码需要访问这些受限方法而又不将这些方法公开。这会产生两个问题:

  • 我无法创建在类之间进行通信的接口,因为这会使这些内部方法公开。
  • 除非将大多数内部类放在同一包中,否则我将无法访问受保护的方法或默认方法。

因此,我在干净隔离的程序包中有大约70或80个内部类,但带有过度允许的访问修饰符。您是说一个单一的软件包减少了两个弊端,还是有更好的方法掩盖我的内部方法,同时又保留了更多的粒度软件包?

我想在这里找到最佳做法。

我已经意识到这


问题答案:

对于您的问题,有两种解决方案不涉及将所有类都放在同一包中。

第一种是使用(实用API设计,Tulach 2008)中介绍的Friend Accessor / Friend
Package
模式

第二种是使用OSGi。有文章在这里解释的OSGi是如何实现这一点。



 类似资料:
  • 16.7. 全部放在一起 你已经学习了足够的知识,现在来分析本章范例代码的前七行:读取一个目录并从中导入选定的模块。 例 16.16. regressionTest 函数 def regressionTest(): path = os.path.abspath(os.path.dirname(sys.argv[0])) files = os.listdir(path)

  • 11.9. 全部放在一起 你已经看到了构造一个职能的 HTTP web 客户的所有片断。 现在让我们看看如何将它们整合到一起。 例 11.17. openanything 函数 这个函数定义在 openanything.py 中。 def openAnything(source, etag=None, lastmodified=None, agent=USER_AGENT): # non

  • 10.7. 全部放在一起 你已经了解很多基础的东西。让我们回来看看所有片段是如何整合到一起的。 作为开始,这里是一个接收命令行参数的脚本,它使用 getopt 模块。 def main(argv): ... try: opts, args = getopt.g

  • 8.9. 全部放在一起 到了该将迄今为止我们已经学过并用得不错的东西放在一起的时候了。我希望您专心些。 例 8.20. translate 函数, 第 1 部分 def translate(url, dialectName="chef"): import urllib sock = urllib.urlopen(url)

  • 6.6. 全部放在一起 再一次,所有的多米诺骨牌都放好了。我们已经看过每行代码是如何工作的了。现在往回走一步,看一下放在一起是怎么样的。 例 6.21. listDirectory def listDirectory(directory, fileExtList): "get list of file in

  • 4.8. 全部放在一起 最后一行代码是唯一还没有解释过的,它完成全部的工作。但是现在工作已经简单了,因为所需要的每件事都已经按照需求建立好了。所有的多米诺骨牌已经就位,到了将它们推倒的时候了。 下面是 apihelper.py 的根本 print "\n".join(["%s %s" % (method.ljust(spacing),