标签: decoupling

进度条和多线程,解耦GUI和逻辑 - 哪种设计模式最好?

我正在寻找适合我的应用程序设计的设计模式.

我的应用程序处理大量数据并生成一些图表.数据处理(从文件中获取,CPU密集型计算)和图形操作(绘图,更新)在单独的线程中完成.

图表可以滚动 - 在这种情况下,需要处理新的数据部分.因为图形上可以有多个系列,所以可以生成多个线程(每个系列有两个线程,一个用于数据集更新,一个用于图形更新).

我不想创建多个进度条.相反,我希望有一个单一的进度条来告知全球进展.目前我可以想到MVC和Observer/Observable,但它有点模糊:)也许有人可以指出我正确的方向,谢谢.

model-view-controller multithreading decoupling observer-pattern progress-bar

5
推荐指数
2
解决办法
2616
查看次数

C#中"using"指令关键字的替代方案?

我刚刚在NDC观看了Bob Martin的一集,他说在页面顶部的C#中使用"using"指令很糟糕,因为它们在组件之间创建/暗示紧密耦合.

在没有添加项目引用和using语句的情况下,有什么方法可以使用外部.dll?

我记得V6曾经让你通过ProgId的字符串创建一个对象 - 我不确定这是我正在寻找的技术,但它是一个不需要项目引用的语言示例DLL.

编辑:这是会议的链接.对不起我在演讲中没有确切的引用或分钟,我记得.

c# coupling decoupling

5
推荐指数
3
解决办法
1917
查看次数

将逻辑与表示分开更多是最佳做法吗?

这应该是一个相当简单的问题,但我似乎无法在互联网上找到一个好的答案.

我一直在研究Java FX,我发现它很有趣,尽管我很难满足于如何设法将逻辑与程序的表示分开.

注意:这可能
Controller.java文件中可能重复的Javafx 2.0操作方法Application.getParameters()
但是在接受的答案中的建议是将变量设置为静态,我也不希望这样做.

背景

我发现的所有教程都有一个控制器,它应该是good'ol MVC方式中表示和逻辑之间的连接.然而,在这里,我发现自己磕磕绊绊,因为我不想初始化一些东西,在这种情况下不重要的东西,并将其传递给我的控制器.

问题

我是否应该将内容传递给我的控制器,还是应该负责初始化(通过自身或通过实例化另一个具有该责任的对象)?

TL; DR

我想在Java FX中将内容传递给我的控制器,我应该这样做还是不好的做法?如果我应该传递东西,我该怎么做?

一些代码澄清:

继承人是我不想做的事情:

主要课程

@Override
public void start(Stage stage) throws Exception {
    Parent root = FXMLLoader.load(getClass().getResource("ChatGUI.fxml"));

    Scene scene = new Scene(root);

    stage.setScene(scene);
    stage.show();
}
Run Code Online (Sandbox Code Playgroud)

示例控制器(带注释)

@Override
public void initialize(URL url, ResourceBundle rb) {
    //Intialize a bunch of stuff here.
    connectionManager = new MyConnectionManager();    
}
Run Code Online (Sandbox Code Playgroud) 以及我想做的事情:

主要课程

@Override
public void start(Stage stage) throws Exception {
    Parent …
Run Code Online (Sandbox Code Playgroud)

java model-view-controller decoupling javafx-2

5
推荐指数
0
解决办法
114
查看次数

对象之间的CBO耦合

我不明白"对象类之间的CBO耦合"究竟意味着什么.我发现的定义太短了,我觉得我错过了一些东西,所以如果你帮我举个例子会很棒.

这是我发现的定义:"对象类之间的耦合是它所耦合的其他类的数量的计数."

提前致谢.

oop coupling decoupling

5
推荐指数
3
解决办法
8935
查看次数

如何在深层中轻松配置"从顶部"对象?

考虑类之间的以下关系:

int main(int, char**) { | class Window {      | class Layout { | class Box {
    /* Use argc/argv */ |     Layout layout;  |     Box box;   |     int height,
    Window window;      |                     |                |         max_width;
}                       |     bool print_fps; | public:        |
                        |                     |     Layout();  | public:
                        | public:             | };             |     Box (int,int);
                        |     Window ();      |                | };
                        | };                  |                |
Run Code Online (Sandbox Code Playgroud)

我为了简单起见构建了这个结构,实际上还有更多的类.
main()我获取一些应用程序参数(通过配置文件,数据库,CLI参数).现在我想将这些值传递给所需的对象.

我的问题:哪些最好/最优雅的方法来"破墙",以便我可以"抛出"配置和谁需要它"抓住"它?


最初,我"打开了一些门",并为 …

c++ configuration dependency-injection decoupling

5
推荐指数
1
解决办法
202
查看次数

依赖注入 - 传递完整的类或类的名称是否更好?

对于依赖注入,我理解我必须将一个类的实例传递给主实例而不是主类创建它自己的实例,就像这样(php):

class Class_One {
  protected $_other;
  public function setOtherClass( An_Interface $other_class ) {
    $this->_other_class = $other_class;
  }
  public function doWhateverYouHaveToDoWithTheOtherClass() {
    $this->_other_class->doYourThing();
  }
}

interface An_Interface {
  public function doYourThing();
}

class Class_Two implements An_Interface {
    public function doYourThing() { }
}

class Class_Three implements An_Interface {
    public function doYourThing() { }
}


// Implementation:
$class_one = new Class_One();
$class_two = new Class_Two();
$class_three = new Class_Three();
$class_one->setOtherClass( $class_two );
$class_one->doWhateverYouHaveToDoWithTheOtherClass();
$class_one->setOtherClass( $class_three );
$class_one->doWhateverYouHaveToDoWithTheOtherClass();
Run Code Online (Sandbox Code Playgroud)

这一切都很好.我知道,由于Class_Two和Class_Three都实现了An_Interface,因此它们可以在Class_One中互换使用.Class_One不会知道它们之间的区别.

我的问题是,不是将实例传递给setOtherClass,而是传递一个字符串,如"Class_Two",并让Class_One的setOtherClass方法实际创建实例本身,这是一个好主意:

class Class_One { …
Run Code Online (Sandbox Code Playgroud)

php dependency-injection interface decoupling

4
推荐指数
1
解决办法
1633
查看次数

是否应将所有对象分离

我有一个问题似乎无法在任何地方得到解答.这是关于将代码与接口分离的问题.问题是 - 是否应将其他对象(正在创建和使用)中的所有对象重构为接口以遵循SOLID的依赖性反转原则?那么在偶数驱动方法中新建对象怎么样?我按下按钮时调用的方法.是否应该传递对象,比如说构造函数?当然这一切都适用于我的对象,而不是BCL吗?

c# dependency-injection decoupling

4
推荐指数
1
解决办法
201
查看次数

用php回复javascript是不好的做法

我有一个php应用程序,它使用一个Listener类,它基本上只是用jquery设置一个ajax请求(下面的例子).但由于某种原因,回应javascript似乎不够优雅.更好的做法是为要传递的javascript(可能引入耦合)构建单例类,还是像我现在正在做的那样回显脚本?

这是我正在做的代码片段.

<?php

        $script = "
                    <script>
                    $(document).ready(function(){
                        $('".$trigger."').".$action."(function() {
                        ".$js_variables."
                            var ajax_load = '';
                            var loadUrl = '".$this->controller_path."';
                            var action = $(this).attr('id');

                            $('".$this->parent."')
                            .hide(2)
                            .html(ajax_load)  
                            .load(loadUrl, {action: action, ".$post_mapper."})
                            .fadeIn(800);
                        });
                    });
                </script>
        ";

      echo $script;

?>
Run Code Online (Sandbox Code Playgroud)

编辑:使用单例类也允许我只使用$(document).ready()或快捷版本$(function(){})一次,而不是每次添加一个监听器.但我不确定这是否值得花费额外的时间和精力......任何想法?

php jquery decoupling

3
推荐指数
1
解决办法
1982
查看次数

当规范坚持时,如何避免类耦合

我有两个耦合的类DhcpServerSessionManager.我的规格中有以下要求导致了这种耦合:

  • DhcpServer如果SessionManager禁止(例如创建会话时发生错误),则不得发出IP地址租约
  • SessionManager必须在创建新租约时启动会话,DhcpServer并在租约到期或客户明确释放后立即销毁会话
  • 另一方面DhcpServer,如果SessionManager停止相应的会话,必须销毁租约(例如,通过系统管理员的请求)

起初,很容易将所有代码放入一个类中.但责任是不同的,所以我将它们分成两个并创建了两个接口:

class ISessionObserver(object):
    def onSessionStart(**kwargs): pass
    def onSessionStop(**kwargs): pass

class IDhcpObserver(object):
    def onBeforeLeaseCreate(**kwargs):
        """
        return False to cancel lease creation
        """
        pass
    def onLeaseCreate(**kwargs): pass
    def onLeaseDestroy(**kwargs): pass
Run Code Online (Sandbox Code Playgroud)

然后,我实现了IDhcpObserverSessionManagerISessionObserverDhcpServer.这导致了耦合.即使类不直接相互依赖,它们依赖于彼此包中声明的接口.

后来我想为会话启动添加另一个协议,SessionManager保持逻辑不变.我也不希望它也能实现IAnotherProtocolObserver.

此外,DHCP服务器与我的会话概念无关.由于Twisted(我正在使用)没有DHCP协议实现,我想将它作为一个单独的项目发布,它既没有依赖也没有依赖SessionManager它的包.

如何在保持代码片松散耦合的同时满足我的规范要求?

python architecture design-patterns decoupling

3
推荐指数
1
解决办法
243
查看次数

Android上的嵌套MVP:如何

我正在开发一个由3个主要部分组成的Android测试项目,每个部分都是按照MVP模式开发的.这些部分互相嵌套,我想知道我所遵循的策略是否正确/最好

结构体:

  • :ViewPager包含不同的页面
  • Page:自定义LinearLayout包含多个项目
  • 项目:自定义视图(在此示例中为简单按钮)

每个部分都使用MVP结构(例如,对于Book I制作了BookPresenter,BookView和BookModel,对于Page和Item也是如此)

作为用户案例,我想跟踪用户点击按钮的次数,并且每次将页面背景更改为随机颜色,当用户到达第10次点击时,告诉BookPresenter转到第二页.

为此我设置了这样的东西

  • BookView创建BookPresenter,它反过来创建每个PageView.
  • 每个PageView创建PagePresenter,然后创建ItemView(最终创建ItemPresenter)

在所有这些中,BookPresenter具有对PagePresenter的引用,并且PagePresenter具有对ItemPresenter的引用,因此当需要执行某些操作时,它们可以与结构中的子或父呈现器进行通信.

现在的问题:这是建立具有嵌套MVP的系统的正确方法吗?因为如果我想要一个PageView而不是在Book中我需要将它放在一个Newspaper(其他具有Book的替代行为的类)中,我仍然需要使用Presenters和其他所有其他类重新创建依赖关系链. ...

architecture mvp android decoupling android-mvp

3
推荐指数
1
解决办法
968
查看次数