首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过构建简明库隐藏复杂性

通过构建简明库隐藏复杂性
EN

Stack Overflow用户
提问于 2009-08-02 05:27:58
回答 3查看 354关注 0票数 2

我正在开发一个包含一堆互锁组件(服务器、客户端、库等)的产品,其中一个组件是一个很小的库,用户可以将它链接到自己的客户端代码(有点像Flickr API或Google Maps API)。一旦它们包含了这个库,所有的互锁位就会神奇地将它们自己挂钩在一起。因此,API简单性是一个主要的、重要的目标。

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

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

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

从外部看,该库应该看起来恰好包含两个公共类,以及七个公共方法。

在你自己的项目中,你是如何处理这种事情的?我对语言不可知的解决方案以及针对不同语言的各种技术、编译器和构建工具感兴趣。

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-08-03 12:16:43

在AS中隐藏东西是相当困难的。有一个内部访问说明符,还有一些名称空间。Adobe在Packages and namespaces上提供了一些可能对您有用的帮助。

重要的是要注意,名称空间并不限制访问-它们实际上是用来将符号放入不同的...很好的命名空间。这可以用来在同一swf中访问同一个库的两个版本。我的猜测是,在将定义插入符号表之前,它只是在幕后进行一些名称篡改。如果用户愿意,他们可以只导入名称空间并访问隐藏在其后面的任何内容。我在分解Adobe组件时就做到了这一点。也就是说,如果用户没有原始源,并且无法确定名称空间标识符,那么您就可以通过模糊性获得一点安全性。

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

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

票数 1
EN

Stack Overflow用户

发布于 2009-08-02 10:21:17

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

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

票数 1
EN

Stack Overflow用户

发布于 2009-08-03 15:30:38

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

代码语言:javascript
运行
复制
package com.example {

   public class A {
      // ...
   }

}

class B {
   // ...
}

class C {
   // ...
}

我甚至写了一个小工具,它将分析项目中所有的"import“指令,并将所有外部依赖项移动到这些隐藏的私有类中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1218225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档