小编Mat*_*hew的帖子

依赖注入容器与注册表模式

我知道依赖注入原则就是解耦代码.而不是在类中创建实例,而是注入它们,这使它们松散耦合.

现在如果我必须传递一组将在我的应用程序中通过几个类使用的对象,我可以创建一个容器(通常称为依赖注入容器).

这正是我正在做的事情,因为我必须传递一个配置对象,一个记录器对象,一个翻译器对象等,它将通过我的应用程序的几个类实例使用.我将整个容器传递给几个类,即使并非所有类都需要访问容器中的所有对象.这引出了以下问题:如果我创建一个全局注册表并将对象放在那里,然后像Registry :: getInstance() - > get('logger')那样检索它们,有什么区别??我使用全局注册表或依赖容器,类isntances可以访问容器或注册表中的所有对象,即使他们不需要查看/访问所有对象.

结论:如果我沿着类或全局注册表传递依赖注入容器,有什么区别?

php oop design-patterns dependency-injection

8
推荐指数
2
解决办法
4291
查看次数

在PHP MVC应用程序中将数据从Controller传递到View

在SO的几乎所有教程或答案中,我看到了一种将数据从Controller发送到View的常用方法,类View通常看起来与下面的代码类似:

class View
{
    protected $_file;
    protected $_data = array();

    public function __construct($file)
    {
        $this->_file = $file;
    }

    public function set($key, $value)
    {
        $this->_data[$key] = $value;
    }

    public function get($key) 
    {
        return $this->_data[$key];
    }

    public function output()
    {
        if (!file_exists($this->_file))
        {
            throw new Exception("Template " . $this->_file . " doesn't exist.");
        }

        extract($this->_data);
        ob_start();
        include($this->_file);
        $output = ob_get_contents();
        ob_end_clean();
        echo $output;
    }
}
Run Code Online (Sandbox Code Playgroud)

我不明白为什么我需要将数据放入一个数组然后调用extract($ this - > _ data).为什么不直接从控制器直接将一些属性放到视图中

$this->_view->title = 'hello world';
Run Code Online (Sandbox Code Playgroud)

然后在我的布局或模板文件中,我可以这样做:

echo $this->title;
Run Code Online (Sandbox Code Playgroud)

php templates variable-assignment

8
推荐指数
1
解决办法
7821
查看次数

如何重置子元素的状态?

假设我有三个元素保持状态计数器,点击时递增.

如果单击一个元素,如何将其他计数器重置为0?

https://jsfiddle.net/69z2wepo/56827

const Parent = React.createClass({
    render() {
        const rows = [];
        for (let i = 0; i < 3; i++) {
            rows.push(<Child key={i} />);
        }
        return (
            <ul>
                {rows}
            </ul>
        );
    }
});

const Child = React.createClass({
    getInitialState() {
        return {counter: 0};
    },
    handleClick() {
        this.setState({counter: ++this.state.counter });
    },
    render() {
        return (
            <div onClick={this.handleClick}>
                {this.state.counter}
            </div>
        );
    }
});

ReactDOM.render(
    <Parent />,
    document.getElementById('app')
);
Run Code Online (Sandbox Code Playgroud)

javascript reactjs

7
推荐指数
2
解决办法
4203
查看次数

PHP OO - 如何初始化业务对象?

根据商业模式或业务对象,我指的是像"用户"这样的普通旧对象,其所有属性名称,地址,......; 除了所有用户属性之外,假设每个用户都有一个"AppointmentBook"对象,每本书都有一组"TimeSlot"对象等.商业模型中有对象,它们之间有引用,至少我是如何对业务进行编码的Java中的模型.问题出在这里:

要用Java初始化我的业务对象,我会的

  1. 在应用程序初始化期间,仅从DB获取一次所有数据,
  2. 将数据从我的数据库映射到我的业务对象
  3. 存储在内存(地图)中,它们将在所有请求中共享.

PHP Share-Nothing-Architecture让我对正确的OO编程感到困惑:如果我使用相同的逻辑,我将不得不从DB中获取所有对象,因为每个请求(我知道我仍然可以缓存,但是你没有缓存所有数据库,这不是关于缓存的问题,而是关于PHP及其架构中的编程方式).

所以,假设对于一个HTTP请求,我只需要用户属性,而不需要访问他的约会簿.从User获取的所有对象中获取DB的所有数据将是一个小问题,因为我只需要他的属性.这意味着我将使用很多NULL值从我的模型初始化PHP对象(因为我将不加载的User中包含的对象为NULL),这可能导致错误.

我想知道专业的PHP开发人员通常如何使用他们的业务对象?(我来自Java)


更新:说在Java中的应用程序初始化期间我将整个数据库加载到内存中是一种愚蠢的做法.我的意思是,如果我需要获取特定用户,我可以加载其所有数据,并且可以通过所有请求访问.

php architecture oop business-objects

6
推荐指数
1
解决办法
1579
查看次数

CSS:在没有嵌套表的<td>的情况下选择表的<td>

如何在没有嵌套表的td的情况下选择表的td元素? 我想到了以下选择器:确保我没有嵌套表的td元素,但我猜有更好的方法吗?
table > tbody > tr > td

css

6
推荐指数
2
解决办法
2084
查看次数

Html5 IndexedDB - 通过其密钥检索值

在大多数turorial中,它展示了如何通过用光标迭代它来从对象存储中检索所有记录.但是如何通过键"myKey"从对象存储中检索值?

html5 indexeddb

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

HTTPS会减慢我的Web应用程序的页面加载吗?

SSL加密会降低页面加载速度吗?如果是这样,我如何估计我的Web应用程序对性能的影响?

performance ssl https pageload

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

如何在Java中创建性感的用户界面

我计划开发一个允许管理客户端数据的桌面应用程序.我是一名经验丰富的Java程序员,但我从来没有真正能够在Java中使用有吸引力的界面,例如,我个人认为默认的Swing组件非常糟糕(当我将它与例如最近的Web界面进行比较时).

所以第一个问题是,如何在Java中创建性感的界面(仍在所有平台上运行)?其次,在HTML5中创建界面不是一个好主意吗?是不是可以在没有Web服务器的情况下运行HTML5接口,因为我不需要在线访问应用程序,因此我不需要服务器.

java user-interface swing swt

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

如何从父母中选择一组孩子?

假设我有一个Parent呈现一组组件的Child组件.当悬停其中一个Child组件时,我希望突出显示(bg颜色)Child属于同一组的组件.

请参阅下面的代码,每个Child都有一个组属性:

https://jsfiddle.net/69z2wepo/53442/

const Parent = React.createClass({
    render() {
        const rows = [];
        let group = 1;
        for (let i = 1; i <= 12; i++) {
            rows.push(<Child key={i} id={i} group={group} />);

            if (i % 3 === 0) {
                group++;
            }
        }
        return (
            <ul>
                {rows}
            </ul>
        );
    }
});

const Child = React.createClass({
    render() {
        return (
            <li className="child">id: {this.props.id} - group: {this.props.group}</li>
        );
    }
});

ReactDOM.render(
    <Parent />, …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs

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

浏览时Java Applet没有被杀死

当用户从已加载applet的页面导航时,如何停止Java Applet的进程?

我正在使用Chrome,现在要杀掉applet,我必须使用window的任务栏并杀死进程java.exe

java applet

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