Tag: 设计

OSGi可以帮助降低复杂性吗?

我看到很多关于OSGi的演讲,我认为这对于实施更好的模块化听起来很有希望。 显然,“热部署”和“并行运行不同版本的x”也是市长的卖点。 我想知道OSGi承诺解决的问题是否是一个问题……? 它让我想起OO的早期时代,类似的声称是女仆: 当OO是新的时,最重要的论点是可重用性。 人们普遍声称,当使用面向对象时,人们只需要“一次写入”,然后就可以“随处使用”。 在实践中,我只看到这适用于一些非常低级的例子。 我认为这样做的原因是编写可重用的代码很难。 从技术上讲,但从界面设计的角度来看。 您必须预测未来客户将如何使用您的课程并预先做出正确的选择。 根据定义,这很困难,因此潜在的可重用性益处通常无法实现。 有了OSGi ,我怀疑在这里我们可能会再次承诺,我们没有真正拥有的问题的潜在解决方案。 或者如果我们拥有它们,我们没有足够大的数量和严重程度来certificate购买OSGi的帮助。 “Hotdeployment”作为模块子集的例子绝对是一个好主意,但它经常有效吗? 多久没有,因为事实certificate你对特定问题的模块化是错误的? 如何在多个模块之间共享模型实体? 这些模块都必须同时更换吗? 或者,您是否将对象展平为基元并仅使用模块间通信中的对象,以便能够保持接口契约? 应用OSGi时最困难的问题是,我认为, 使模块化“正确” 。 类似于在OO中使用OSGi获取类的接口,问题保持不变,这次是更大规模,包甚至服务级别。 您可能已经猜到了,我目前正在尝试评估OSGi以用于项目。 我们遇到的主要问题是随着代码库的增长而增加复杂性,并且我希望在具有越来越多定义的交互的较小模块中打破系统。 鉴于没有任何框架可以帮助决定模块化,OSGi是否为您付出了代价? 在团队合作时,它是否让您的生活更轻松? 它有助于减少错误数量吗? 你有没有成功地“热部署”主要组件? OSGi是否有助于降低复杂性? OSGi是否遵守承诺? 它符合你的期望吗? 谢谢!

应用程序启动器如何更新自身?

发射器在游戏中最常见。 想想英雄联盟,星际争霸II,或几乎任何MMO。 在开始实际游戏之前,您有一个小型启动器应用程序,负责更新和修补。 我想用我正在开发的特定非游戏应用程序来移动这个方向。 启动器的概念非常有意义:它检查更新,替换相应的二进制文件/库,可能运行完整性检查,并启动应用程序。 但是,发射器如何更新自己? 这往往是罕见的事件,但它是如何完成的? 启动程序是否真的只是写了它当前运行的二进制文件? 或者下载后是否有某种交换步骤? 我需要能够推出(罕见的)更新到启动器(特别是如果我发现我的启动器中的一些错误)。 我的特定项目将在C#中,但我对概念上类似的C ++和/或Java解决方案感兴趣以供将来参考。

使用Scene Builder在JavaFX中创建MVC模式

我是JavaFX的新手,并且在我目前的设置下努力创建一个合适的MVC架构。 我使用Scene Builder将UI单击在一起,并指定了一个Controller类。 启动: public class Portal extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage stage) throws Exception { Parent root = FXMLLoader.load(getClass().getResource(“PortalUI.fxml”)); stage.setTitle(“Portal”); stage.setScene(new Scene(root)); stage.show(); } } Controller类包含其余代码。 public class AccommodationPortalView implements Initializable { @Override public void initialize(URL url, ResourceBundle resources) { // Work here. } […]

简单的java消息调度系统

我正在开发一个可以发生各种事件的小型Java游戏。 至少有几十个基本事件,各种事件处理程序可能会感兴趣。代码中还有几个地方可能会触发这些事件。 我不想强迫事件监听器知道他们需要注册哪个类,而是想创建某种集中式的消息调度系统,有些类会将事件提交到,感兴趣的类可以挂钩来监听某些类型事件。 但我有一些问题。 首先,这似乎是一个明显而常见的问题。 是否有简单的虚拟机内消息系统的最佳实现? 好像会有。 其次,更重要的是,我正在尝试为调度类找出一种相当优雅的方式来尽可能少地了解消息的类型。 我希望能够在不修改消息调度程序的情况下创建新类型的事件。 但是,我有一个相反的担忧。 我真的很想清楚处理方法的方法签名。 换句话说,我更喜欢以下内容: public class CollisionConsoleHandler implements CollisionListener { @Override public void spaceshipCollidedWithMeteor( Spaceship spaceship, Meteor meteor ) { //… } } 更通用,更难阅读的东西: public class CollisionConsoleHandler implements GameMessageListener { @Override public void handleMessage( GameMessage message ) { if( message instanceof SpaceshipCollisionMessage ) { Spaceship spaceship = […]

发现循环依赖的问题

我正在设计一个系统,其中有两个模块,一个是gestions文件,另一个是用户。 对于某些逻辑操作,他们需要彼此提供的服务。 每个模块都由一个单例表示,它实现了一个为彼此提供一些服务的接口,抽象工厂提供它们,如下所示: public class UserMain implements UserInternalService { /* * Internal interfaces */ /** * Allows interaction with the projects database. */ FilesInternaService fileSystem; /** * Constructor is private, as this is a singleton. */ protected UserMain() { } private static UserMain singleton = null; /** * Singleton factory. Returns a reference to the […]

Java通用接口与类型安全实现

我正在寻找从通用框架调用特定接口的好方法。 我将用代码举例说明。 查看问题部分 ,示例代码主要包含在内,以便彻底,并将示例放入真实场景中。 例 假设我们想要基于组件列表构建报告。 假设我们有两种特定的组件类型: public interface Component { … } public class PDFComponents extends Component { … } public class WordComponents extends Component { … } 每个组件都有一个ReportBuilder实现,例如, public interface ReportBuilder { … } public class PDFReportBuilder extends ReportBuilder { … } public class WordReportBuilder extends ReportBuilder { … } 其中构建特定的报告实现 public interface […]

哪个是此设计的更好的顶级容器,JFrame与Jpanels,或JDesktop与JInternalFrames

我是Swing和AWT的初学者,我正在寻找使用Netbeans构建GUI。 我的GUI需要三个区域,我目前正在考虑将其作为JFrame上的JPanels。 我需要一个“绘图”面板,它将监听鼠标输入并绘制Java2D形状。 绘图面板将固定在左上角。 另外两个区域是“属性”滚动窗格和“控制器”滚动窗格。 控制器窗格将确定将通过按钮显示哪些绘制元素,属性滚动窗格将显示有关在绘图窗格中单击的任何形状对象的详细信息(端点,颜色等)。 绘图区域的典型用例是绘图区域中的第一次点击将是形状的第一组坐标,IE:一条线。 该点击将被捕获为point2d对象。 第二次单击将是第二个point2D对象,并且将在两者之间构建一条线。 控制器区域将具有“圆圈”,“线”,“椭圆”等按钮。根据单击的控制器按钮,将仅在绘图区域中绘制该类型的形状。 控制器和属性滚动窗格将不可移动,它们将分别锁定并可调整到GUI的底部和右侧。 作为初学者,我正在努力使用最好的组件。 我一直在阅读JDesktop和JInternalFrame,但似乎我并不真的需要这一切。 一个简单的JFrame有三个JPanel就足够了吧? 更具体地说,我认为我需要一个顶级JFrame,一个JPanel用于绘图框架和两个JScrollPanels。 我需要在绘图窗格中使用鼠标监听器来捕获每次单击的坐标,以及控制窗格中每个按钮的监听器。 我可以在JPanel上放置一个鼠标监听器,并为其绘制Java2D形状,还是需要在JPanel内部使用不同的(更好的?)容器来绘制它?

选择阶梯式文字游戏的设计方法

我正在尝试构建一个简单的应用程序,完成的程序看起来像这样: 类似梯子的游戏http://img199.imageshack.us/img199/6859/lab9a.jpg 我还必须为此实现两种不同的GUI布局。 现在我正在试图找出执行此任务的最佳方法。 我的教授告诉我介绍有4种状态的Element类: – 空的 – 不可见(在GridLayout中使用) – 第一封信 – 其他信件 我已经考虑过以下解决方案(通过列表我的意思是任何类型的集合): 1.元素是单个字母,每行是Element []。 游戏类将是数组Element []的数组。 我猜这是最愚蠢的方式,validation可能会很麻烦。 2.像以前一样,但Line是元素列表。 游戏是一系列线条。 像之前一样,但Game是一个行列表。 我应该选择哪一个? 或许你有更好的想法? 如果使用哪一个最好的集合?

正确设计实体类。 需要建议

例如,我有实体类User : public class User { private long id; private String name; // setters and getters } 接下来,我添加新的实体类: Comment public class Comment { private long id; private String comment; // setters and getters } 接下来,我可以添加越来越多的实体类。 而且,此时我想:我可以/必须在逻辑结构中绑定/连接我的实体类还是没有? 我的意思是说? 我试着解释一下: 第1点:所有这些类: User , Comment等 – POJO 。 想法1:需要通过接口或抽象类对这些类进行逻辑绑定。 第2点:我看到,所有实体类都有相同的方法: getId和setId() 。 想法2:需要避免在所有类中声明此方法。 我的解决方案 添加接口BaseEntity : public interface […]

setter和getter方法是否打破了封装?

有人告诉我们应该避免使用限制器和吸气剂。 关于它有各种各样的想法,但根据我使用这些突破封装。 为什么? 因为它告诉世界一个物体的内部。 例如: class Point { private int x; private int y; void setx(int x) {…} int getx() {…} … } 该对象应该只暴露为客户端提供清晰抽象的行为。 class Point { private int x; private int y; int coordinate(int x) {…} // 0, 1, 2, 3 … } 那么,这些存取器和setter方法是否打破了封装?