这个问题是我先前问题的延续,这里是 Zend模型架构(非常感谢Bill Karwin).我已经做了一些阅读,包括这篇文章
这个问题
现在我明白了,域驱动设计是什么.但是例子仍然非常简单和糟糕.它们基于一个表和一个模型.现在,我的问题是:他们是否在现实世界的PHP项目中使用域模型设计?
我一直在寻找一些关于这方面的好文档,但我还没有找到任何足够好的文档,它解释了如何管理多个表并将它们传输到Domain Objects.只要我知道,就有Hibernate库,它具有Java中的这些功能,但我应该在PHP(Zend Framework)中使用什么?
我正在尝试在Weblogic12下配置sl4j/logback.我部署了ear文件,它有war文件,有WEB-INF\classes\logback.xml
这是配置:
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>
Run Code Online (Sandbox Code Playgroud)
我记录的代码:
private static final Logger logger = LoggerFactory.getLogger(FrontEndServlet.class);
//......
logger.info("info test");
logger.debug("debug test");
logger.error("error test");
Run Code Online (Sandbox Code Playgroud)
我在标准输出中看到的是:
??? 14, 2012 5:09:29 PM .....FrontEndServlet doPost
INFO: info test
??? 14, 2012 5:09:29 PM .....FrontEndServlet doPost
SEVERE: error test
Run Code Online (Sandbox Code Playgroud)
因此,看起来配置文件没有被选中.我究竟做错了什么?
我正在尝试在我的Symfony2项目中实现域驱动设计并遇到一些问题.在阅读了一些关于Domain Models的文章后,我发现了
幸运的是,Symfony提供了活动,但这是一个问题 - 我不能从我的实体提出事件.Symfony文档建议使用DI将调度程序注入类中,从而引发Event
http://symfony.com/doc/current/book/internals.html#passing-along-the-event-dispatcher-object
但Symfony实体是新的,不可注射.现在我可以看到两种方式:
1)向这样的实体提供事件Dispather
class FooEntity
{
protected $dispatcher = null;
public function setEventDispatcher(EventDispatcher $dispatcher)
{
$this->dispatcher = $dispatcher;
}
}
Run Code Online (Sandbox Code Playgroud)
2)从服务(而不是实体)提升事件.
这些选项看起来都不是很漂亮,因为在我看来他们打破了域模型的意识形态.请你指点我正确的方向.
我想在Ext JS 4中创建一个单例对象.
这是我的代码:
Ext.define('AM.model.Test', {
extend : 'Ext.util.Observable',
singleton : true,
foo : function() {
console.log('log 1');
},
constructor : function() {
}
});
Run Code Online (Sandbox Code Playgroud)
我叫它:
AM.model.Test.foo();
Run Code Online (Sandbox Code Playgroud)
只要我在app.js中定义define,一切正常.当我尝试将此定义移动到'app\model\Test.js'时,我收到此错误:
AM.model.Test is undefined [Break On This Error]
AM.model.Test.foo();
我的代码出了什么问题?
有人可以向我解释这种行为.让我们声明一个类:
Ext.define('baseClass',{
a:null,
ar:[],
add:function(v) {
this.ar.push(v);
},
sayAr:function() {
console.log(this.ar);
},
setA:function(v) {
this.a= v;
},
sayA:function() {
console.log(this.a);
}
});
Run Code Online (Sandbox Code Playgroud)
现在我创建了两个对象
var a = Ext.create('baseClass');
var b = Ext.create('baseClass');
Run Code Online (Sandbox Code Playgroud)
测试财产
a.setA(1);
b.setA(2);
a.sayA();
b.sayA();
Run Code Online (Sandbox Code Playgroud)
这输出
1
2
Run Code Online (Sandbox Code Playgroud)
一切都很好,但是
a.add(1);
b.add(2);
a.sayAr();
b.sayAr();
Run Code Online (Sandbox Code Playgroud)
我们得到了
[1,2]
[1,2]
Run Code Online (Sandbox Code Playgroud)
这个我不明白.为什么它为两个对象使用单独的"a"属性,但使用一个"ar"数组."ar"未声明为静态!我根本得不到它.
我有一个大约15Gb的MyIsam表.我删除了大约一半的行,删除查询大约需要10个小时.现在我害怕开始optimize table,因为我不知道要花多长时间.如果您有这种大桌子的经验,请与我分享.
PS删除过程后,查询"select*from table limit 0,30"需要数年时间.会有optimize table帮助吗?
需要10个多小时吗?
如果我打断"优化表"查询,会发生什么?
在jquery Datatables中是否可以使用服务器端脚本定义列?我需要这样的东西

必须从服务器加载包含日期的列.然后列数可以变化.
假设我在数据库中有两个表:项目和用户.我创建了两个扩展Zend_Db_Table_Abstract的模型:Model_DbTable_Users和Model_DbTable_Projects.
现在,Model_DbTable_Projects在Model_DbTable_Users类中创建一个实例是一个很好的模式吗?换句话说:在这个模型中放置任何逻辑是否可以,或者我应该创建另一个使用Model_DbTable_Users和的类Model_DbTable_Projects?
我用来将所有逻辑放在模型中,扩展Zend_Db_Table_Abstract,但在大型项目中,它可以使代码非常不干净.所以,你能给我任何关于模型架构的建议(文章链接会很棒!).
假设我有一个名为Vehicle的模型
Ext.define('AM.model.Vehicle', {
extend: 'Ext.data.Model',
fields: [
{name: 'brandId', type: 'int'},
{name: 'brandName', type: 'string'},
{name: 'modelId', type: 'int'},
{name: 'modelName', type: 'string'},
{name: 'yearOfRelease', type: 'int'}
]
});
Run Code Online (Sandbox Code Playgroud)
如您所见,车型有"brandId","brandName"等字段.例如,我想编辑此模型的实例.我创建了一个编辑表单,其中的combobox链接到'brandId'字段.然后我将表单值保存到模型实例中
values = form.getValues();
record.set(values);
Run Code Online (Sandbox Code Playgroud)
一切正常,但是代表一些外部模型的所有字段都存在问题:只更新了id,而依赖于id的所有其他字段保持不变.
在常规OOP语言(例如Java)中,我将创建一个类CarBrand并将此类的实例放在Vehicle类中.在ExtJs 4中,他们有很多关系,但没有hasOne.
ExtJS 4中针对此类嵌套模型的最佳方法是什么?
我想在我的项目中使用Zend Paginator进行原始sql查询(而不是Dbselect).我不能使用Dbselect,因为我在主sql查询中有几个子查询.从手册中我发现唯一的方法就是在这样的结果数组上使用分页
$paginator = Zend_Paginator::factory($array);
Run Code Online (Sandbox Code Playgroud)
但是我在查询中有很多记录,对我来说这看起来不错.有什么方法可以解决这个问题吗?
我的表格上有组合框的问题.问题是当我加载表单数据时(有form.loadRecord),有时组合框是空的,即使我知道模型有数据.
当我查看Firebug时,我可以看到在加载记录后加载了组合框存储.我认为这就是原因 - 组合框存储器稍后加载然后加载记录.
这是我设置combobox商店的方式:
//All stores have autoload:true configuration.
var possessionGroundsStore = Ext.create('path.to.store');
var vehicleTypesStore = Ext.create('path.to.store');
var usePurposesStore = Ext.create('path.to.store');
this.editView = Ext.create('path.to.view');
this.editView.getPossessionGroundsField().store = possessionGroundsStore;
this.editView.getVehicleTypeIdComboBox().store = vehicleTypesStore;
this.editView.getUsePurposeField().store = usePurposesStore;
//later
this.editView.loadRecord(record);
Run Code Online (Sandbox Code Playgroud)
有没有一种解决这个问题的常用方法?
我现在能看到的唯一方法是store.load在每个组合框存储中使用回调,然后在加载所有存储后执行loadRecord,但这看起来很复杂.
有帮助吗?
更新:
何时form.loadRecord调用内部调用field.setValue().所以,重点是:在setValue调用之前必须填充组合框存储.如果未加载商店,您将看到valueField而不是displayField.
extjs ×4
extjs4 ×3
php ×2
architecture ×1
datatables ×1
events ×1
inheritance ×1
javascript ×1
jquery ×1
json ×1
logback ×1
model ×1
myisam ×1
mysql ×1
optimization ×1
pagination ×1
singleton ×1
slf4j ×1
symfony ×1
weblogic ×1