我需要一些资源来讨论如何将软件设计为可扩展的,即让其他人可以编写添加功能的附加组件/插件.
您有什么推荐的吗?那里有讨论这个主题的书吗?
我更喜欢那些简短而重要的东西; 一点理论和一堆具体的例子.
我不是针对特定语言,我希望能够理解核心思想,以便我可以用任何语言实现它.
出于同样的原因,我宁愿不使用其他人构建的框架(除非框架不是非常高级,即不会隐藏太多),目前我只想教育自己主题和实验以各种方式实现它.此外,框架通常假定用户对该主题的了解.
UPDATE
我不是在询问OOP或者是否允许我的类被继承.我所说的是设计一个将部署在系统上的应用程序,以便在部署之后可以通过第三方附加组件进行扩展.
例如,Notepad ++有一个插件架构,您可以将.dll文件放在plugins文件夹中,并为不存在的应用程序添加功能,例如颜色选择或片段插入,或许多其他内容(广泛的功能).
我的问题非常简单:应用程序的哪些功能迫使开发人员利用类似OSGI的系统?当不需要这样的工具时,有哪些情况?
我正在java中开发一个基于语义的搜索应用程序.为了使应用程序模块化,我想使用osgi架构.但由于我是osgi的新手,我不知道使用它的优点和缺点.任何人都可以解释使用osgi的优点/缺点,使用osgi /应用程序将通过这样做获得什么样的应用程序将受益?
谢谢!!
我一直试图更多地了解OSGi的更广泛的图片而不通过整个规范阅读.和许多事情一样,OSGi实际上是什么的介绍可能是由那些已经工作了十年的人编写的,也许并不是最能让自己置身于对此一无所知的人心态的人:-)
看看菲利克斯的例子DictionaryService,我真的不明白发生了什么.OSGi是一个独特的JVM实例,您可以在其中加载捆绑包,然后可以找到彼此的捆绑包吗?
显然,这是不 只是这一点,因为在计算器上其他的答案是明确的是OSGi的解决包含不同的JVM(加上FAQ在谈论内部署的模块分布式系统的依赖性问题的网络).
在后一种情况下,在一个JVM中运行的组件如何与单独的JVM中的另一个组件交互?这两个组件可以相互"使用",就像它们在同一个JVM中运行一样(即通过本地方法调用),OSGi如何管理网络上的数据编组(Serializable例如,您是否必须使用)?
或者组件作者是否必须使用其他一些不同的机制(由OSGi提供或自己编写)来进行远程组件之间的通信?
任何帮助非常感谢!
这是8年前在这里被问到的,从那时起已经过了8年.我想再次问这个问题,看看是否有人开发了一个猴子修补的框架,工具或库.
基本上我需要它是一个java应用程序,我应用自己的补丁.由于这个项目由另一个团队维护,我希望能够保留/应用我制作的任何补丁,以及他们制作的补丁.
我有两个版本的Java库model.jar,每个版本都有相同的类集(但实现不同).我想编写一个Java类,从一个版本导入一些类,并从另一个版本导入一些类.
我知道我可以通过给他们不同的名字包括在编译中:
javac -cp model.jar;model2.jar MyClass.java
Run Code Online (Sandbox Code Playgroud)
但是任何import语句都会从我在类路径中指定的第一个.jar文件中导入相应的类.
我可以在我的import语句中指定要导入哪个库,因为两个文件的库结构都相同吗?
由于这个问题,我理解OSGI解决的问题....
而且我已经相信Guice是惊人的,所以我很好奇这个被称为"peaberry"的Guice的OSGI集成应该做什么,它似乎在各处出现,甚至在Maven 3演示中.
是否可以只在同一个包和子包中访问接口?
我已经使用默认修饰符定义了一个接口:
package com.mycompany.myapp.dao;
import java.io.Serializable;
interface BaseDao<T, Id extends Serializable> {
public void create(T t);
public T readById(Id id);
public void update(T t);
public void delete(T t);
}
Run Code Online (Sandbox Code Playgroud)
现在我有一个子包,我想在其中定义一个实现的类BaseDao.所以我写了这段代码:
package com.mycompany.myapp.dao.jpa;
import java.io.Serializable;
public class BaseDaoJpa<T, Id extends Serializable> implements BaseDao<T, Id> {
...
}
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
BaseDao无法解析为某种类型
那么这是Java对接口的限制,还是我做错了?
谢谢