2

我正在开发一个包含一堆互锁部分(服务器、客户端、库等)的产品,其中一个是一个微型库,用户将链接到他们自己的客户端代码(有点像 Flickr API 或谷歌地图 API)。一旦他们包含了那个库,所有的互锁位都会神奇地连接在一起。所以 API 的简单性是一个主要的、重要的目标。

我向用户公开的 API 总共有两个类和七个公共方法。简单的豌豆,柠檬汁。

但简单是一种精心制作的错觉。我分发的库实际上依赖于另一个库,它自己有 136 个类(以及一千多个公共方法)。在构建过程中,我将这两个库链接到一个可交付成果中,以方便 API 使用者的集成和部署。

我现在面临的问题是,我不希望最终用户(集成我的软件以增强他们自己的功能的应用程序开发人员)被所有这些额外的麻烦所困扰,淹没在不必要的复杂性洪流中。

从外面看,这个库应该看起来正好包含两个公共类,正好有七个公共方法。

您如何在自己的项目中处理此类事情?我对与语言无关的解决方案以及针对不同语言、编译器和构建工具的各种技术感兴趣。

在我的具体情况下,我正在为带有 SWC 库文件的 flash 平台(AIR/Flex/Actionscript)进行开发。构建方法类似于 Java 平台,其中所有类都捆绑到具有相同可见性的压缩代码模块中(从概念上讲,Actionscript SWC 文件与 Java JAR 文件几乎完全相同)。

.NET 没有用于类和方法的“内部”修饰符吗?这正是我正在寻找的东西,如果有人知道隐藏 SWC 边界之间类的可见性的棘手技术,我很想听听。

4

3 回答 3

1

我认为您可以通过使用命名空间来实现这一点: http://livedocs.adobe.com/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file= 00000040.html

请注意,actionscript 中的命名空间与 C# 中的命名空间不同,它更像 xml 中的命名空间。

于 2009-08-02T10:21:16.657 回答
1

在 AS 中隐藏东西是相当困难的。有一个内部访问说明符,也有命名空间。Adobe 在包和命名空间方面提供了一些可能对您有用的帮助。

重要的是要注意命名空间不限制访问 - 它们实际上用于将符号放置到不同的......以及命名空间中。这可用于在同一个 swf 中访问同一个库的 2 个版本。我的猜测是,在将定义插入符号表之前,它只是在幕后进行了一些名称修改。如果用户愿意,他们可以只导入命名空间并访问它背后“隐藏”的任何东西。我在破解 Adob​​e 组件时已经这样做了。也就是说,如果用户没有原始来源并且无法确定名称空间标识符,那么您可以通过默默无闻获得一点安全性。

包访问说明符(例如私有和内部)更接近您想要的。但是,如果可以访问包边界之外的类,那么用户也可以。甚至有一些我见过的黑客可以检查 swfc 并吐出可以使用 getClassByDefinition 实例化的嵌入式类列表。

因此,您可以隐藏文档中存在的类,尽可能使用内部和私有访问说明符,然后使用命名空间来破坏类名。但是你不能阻止一个有决心的人找到和使用这些课程。

于 2009-08-03T12:16:42.857 回答
0

顺便说一句,我使用的其他技巧之一(因为我不知道“内部”修饰符或命名空间)是通过在当前包之外声明它们来隐藏类,如下所示:

package com.example {

   public class A {
      // ...
   }

}

class B {
   // ...
}

class C {
   // ...
}

我什至打算编写一个小工具来分析项目中的所有“导入”指令并将所有外部依赖项移动到这些隐藏的私有类中。

于 2009-08-03T15:30:37.513 回答