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

2023-11-23

我正在努力打包供公众使用的 API。因此,我试图限制仅向那些我希望公开且可支持的方法公开的方法。当然,在此之下还有许多受限的访问方法。

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

  • 我无法创建接口 类之间的通信是这样的 将使这些成为我的内部方法 民众。
  • 我无法访问受保护或默认的 方法除非我把大部分 我的内部课程相同 包裹。

因此,我在完全隔离的包中拥有大约 70 或 80 个内部类,但具有过于宽松的访问修饰符。您是否会说单个包是两害相权取其轻,还是有更好的方法能够掩盖我的内部方法,同时保留更细粒度的包?

我有兴趣在这里找到最佳实践。

我已经知道了This


您的问题有两种解决方案,不涉及将所有类保留在同一个包中。

第一个是使用 Friend Accessor/好友套餐(实用 API 设计,Tulach 2008)中描述的模式。

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

相关问题:1, 2, 3, and 4.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 使用 CLI 清除客户端缓存

    我们正在使用aurelia cli 任务包括 build json build ts process css ts process markup ts process sass ts run json run ts test json te
  • Scrapy PyInstaller OSError:无法获取源代码/twisted.internet.defer._DefGen_Return

    我正在尝试使用 PyInstaller 将一个非常简单的 Scrapy 蜘蛛发布为 EXE 文件 我已经搜索并阅读了我能找到的所有内容 但我仍然无法弄清楚出了什么问题 我怎样才能解决这个问题 如果我将yield更改为return 它不会给我
  • 在 Freemarker 宏中模拟空参数

    我正在使用 Freemarker 构建一个网站 并开始大量使用宏 我知道在 Freemarker 2 3 中 将 null 值作为参数传递到宏中相当于根本不传递参数 因此我创建了一个名为 null 的全局变量来模拟宏中的 null 检查 l
  • C 预处理器将“int x”拆分为 int & x

    我需要能够获得以下内容 define MY MACRO PARAM1 PARAM2 MY OTHER MACRO TYPENAME OF PARAM1 PARAMNAME OF PARAM1 MY OTHER MACRO TYPENAME
  • 集合的伪随机遍历

    我一直在读游戏编码完成 第四版 我在理解第 3 章 有用东西的抓取袋 部分中的 集合的伪随机遍历 路径时遇到了一些问题 您是否想知道 CD 播放机上的 随机 按钮是如何工作的 它会随机播放 CD 上的每首歌曲 而不会播放同一首歌曲两次 这是
  • android tv - 重新加载适配器数据

    我想重新加载浏览片段中的一些行数据 基本上我想重置适配器数据而不在浏览片段中造成类似闪存的效果 知道如何做到吗 就像是notifyDataSetChanged 在列表视图中 Thanx 这将刷新数据而不丢失当前位置 for int i 0
  • 监视 Windows 中进程执行的某些系统调用

    我希望能够监视进程进行的某些系统调用 主要是文件 I O 调用 在Linux上我可能可以使用strace具有合适的参数 但如何在 Windows 上执行此操作 我主要感兴趣的是运行一个进程并找出它已读取和写入的文件 我想从另一个进程以编程方
  • 继承自Set.prototype

    这真的很困扰我 我可以轻松创建一个继承方法的新类Array prototype var MyArray function MyArray prototype Array prototype var myArray new MyArray m
  • 如何在 DDEV Web 容器中添加和使用 nvm?

    目前 DDEV Web 容器不附带 nvm 节点版本管理器 如何通过 DDEV config yaml 文件添加和使用它 在当前的 ddev v1 19 中 默认安装了 nvm 并且可以与ddev nvm 所以您不必执行任何操作 看docs
  • Python:导入模块导入模块

    所以在文件 foo 中我导入模块 import lib helper functions import lib config 在 helper functions py 中 我有 import config 当我运行 foo 的 main
  • Jmeter中的吞吐量计算

    Attached is the Summary Report for my tests 请帮我理解JMeter的吞吐量值是如何计算的 例如第一条线路的吞吐量53 1 min 这个数字是JMeter用什么公式计算出来的 另外 想知道后续测试中
  • 我如何通过 Objective-c 访问 iPhone 文件?

    我注意到有一些软件 例如 iExplorer 可以让您从 Mac 访问 iPhone 设备上的文件 现在我的问题是 如何通过 Objective c 访问 iPhone 文件 这仅用于教育目的 我找到了这个 https github com
  • 如何知道应用程序运行在什么 Mac 操作系统上?

    我在一些项目中看到过类似的东西 if code endif 但我现在找不到了 例如 如果应用程序在 10 8 上运行 则该应用程序会执行 1 件事 否则该应用程序会执行其他操作 编写什么代码来检查它是否在 10 8 上运行 Thanks 你
  • Mod重写问题

    和其他许多人一样 我在 apache 中进行一些非常简单的 mod rewriting 时遇到了问题 我的 htaccess 中有以下内容 Options FollowSymLinks RewriteEngine on RewriteBas
  • 如何将 Rust 内存分配器用于可提供分配器的 C 库?

    我正在编写与 C 库的 Rust 绑定 该库可以选择使用第三方内存分配器 它的界面如下所示 struct allocator void alloc void old uint void free void 我猜 相应的 Rust 结构如下
  • 当 MKMapView 显示UserLocation == YES 时隐藏 MKUserLocation

    设置后mapView showsUserLocation为 true 是否可以在不显示 MKUserLocation 气泡的情况下接收位置更新 返回零mapView viewForAnnotation 只是显示气泡 返回任何其他类型的注释会
  • 选择的图库默认项目位于中心[重复]

    这个问题在这里已经有答案了 可能的重复 android图库图像位置问题 我在我的应用程序中使用图库视图 现在当我运行代码时 图库默认选择的项目为 1 位于中心 左侧为空白 相反 我不希望左侧有 1 项被选中 此外 单击任何图库项目不应将该项
  • std::unique_ptr 的“无抛出取消引用”

    我用 C 编写代码 使用std unique ptr u处理一个std string资源 我想取消引用u这样我就可以通过std string的电话std string复制构造函数 std string copy new std string
  • Android:列表视图中的指南针+距离

    我想你们都尝试过地图中的 Google Places 这是您附近的 POI 列表 我真的很想在我的应用程序中使用 GPS 坐标列表来实现相同的功能 但这看起来非常复杂 制作带有距离和小箭头的列表视图非常容易 但我不明白如何在用户每次移动手机
  • 我的内部 API 类应该全部放在一个包中吗?

    我正在努力打包供公众使用的 API 因此 我试图限制仅向那些我希望公开且可支持的方法公开的方法 当然 在此之下还有许多受限的访问方法 问题是我有很多内部代码需要访问这些受限制的方法而不将这些方法公开 这会产生两个问题 我无法创建接口 类之间