我正在使用MVP模式开发大规模应用程序.在开发过程中,我提出了是否应该使用组合或继承的问题.例如:让我们假设我有一个名为形式美孚与场一个和乙.在本申请的另一部分我有一个表格栏具有相同字段阿和乙但附加字段Ç.
目前,代码是使用继承方法编写的,其中表单Bar从表单Foo继承.然后,演示者处理与模型略有不同的数据.这很简单,但是如果遵循"是A"的经验法则,是否打败我,因为即使表格不同,它们也处理公共输入(A和B).
然而,在这里我一直在考虑"继承的构成"和Liskov替换原则,并认为我应该使用组合而不是继承.然而,因为我使用的是MVP,所以它比预期的要复杂得多,因为我必须有一个表格Foo的演示者,字段A和B,然后是一个带有字段C的Bar的演示者,以及对Foo的演示者的引用,以便它可以将字段A和B注入其中.
问题是它已被证明是更多的代码,因为我必须在Foo的演示者中添加一些排序getter和setter,以便能够将数据传递给Bar.如果我打破MVP以提供作曲,这感觉就像某种程度.
所以我的问题是:
对于我的情况,使用组合而不是继承是否真的更好?为什么?
使用组合"打破"MVP?
我发现Enums定义如下:
public Enum MyEnum {
ONE
{
@Override
public int getSomething() {
return 1;
}
},
TWO
{
@Override
public int getSomething() {
return 2;
}
}
int getSomething()
{
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
不知何故,我觉得这种实现有些不适,因为我认为理想情况下应该为此目的定义一个字段,类应该类似于:
public Enum MyEnum{
ONE(1),
TWO(2)
private int theSomething;
private MyEnum(int something) {
theSomething = something;
}
int getSomething()
{
return theSomething;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,除了个人的不适,我找不到任何改变此代码的充分理由.有存在吗?
对JQuery有一点问题datePicker,我怀疑这只是我忽略或错误的设置问题.
如果你看看这个简单的小提琴:JS Fiddle
你会看到我已经设置了年份范围,所以默认情况下,当你点击输入它会在1994年打开它,但是如果你然后点击任何这些日期,例如9月3日,它实际上把它放在2012年的输入中,而不是在下拉菜单中选择的年份.
如何才能使用正确的年份而不必更改下拉菜单然后再将其更改回来?
干杯.
当我尝试直接使用索引访问数组元素时,我感到困惑.我想我可以在编码中更好地解释它: -
我有一个Employee Class的对象和我TypeCast它到数组并尝试显示如下:
$arrOfObj = (array) $objEmployee;
$arrKeys = array_keys( $arrOfObj );
display( $arrOfObj ); // display() is a method in my library that prints an array in a mannered way.
Run Code Online (Sandbox Code Playgroud)
这给了我以下输出: -
Array
(
[*m_UserId] => 1155
[*m_EmailPassword] =>
[*m_IsAssignedToManagementCompany] =>
[*m_ManagementCompanyId] =>
[*m_DepartmentId] => 3
[*m_DesignationId] => 4
[*m_EmployeeCompletedMonth] =>
[*m_EmployeeCompletedDay] =>
[*m_EmailAddress] =>showket.mca@gmail.com
------
------
)
Run Code Online (Sandbox Code Playgroud)
现在我在这里不明白这个星(*).当我的成员变量很简单时,如m_UserId,m_EmialPassword等等,从中得到这个星.当我尝试用以下2个语句显示相同时我得到一个错误: -
display( $arrOfObj['*m_EmailAddress'] );
Run Code Online (Sandbox Code Playgroud)
要么
display( $arrOfObj['m_EmailAddress'] );
Run Code Online (Sandbox Code Playgroud)
两者都给出错误消息未定义索引:m_EmailAddress
当我尝试这样做它工作正常: -
display( $arrOfObj[$arrKeys[8]] );
Run Code Online (Sandbox Code Playgroud)
最后一个工作正常,任何人都可以解释我的问题.
display( $arrOfObj[$arrKeys[11]] ); …Run Code Online (Sandbox Code Playgroud) 我用a JScrollPane来显示一个JTable.我希望表中的列具有最小尺寸,这样当缩小屏幕时,会出现水平滚动; 但我也希望它们能够在屏幕变宽时扩展.使用当前代码,tha列不会通过其最小值,只是视口停止显示整个表并且不会激活水平滚动条.是否有一个方法ti设置滚动条应显示的宽度?
这是我的一些代码:
private void addTable(JTable table){
initColumnSizes(table);
JPanel tablePanel = new JPanel(new BorderLayout());
JScrollPane scrolled = new JScrollPane(table);
scrolled.getViewport().setMinimumSize(tableSize);
scrolled.setMinimumSize(tableSize);
scrolled.setPreferredSize(tableSize);
scrolled.setBorder(border);
tablePanel.add(scrolled, BorderLayout.CENTER);
//more stuff
}
Run Code Online (Sandbox Code Playgroud)
以下是initColumns方法的代码,以备您需要时使用
private void initColumnSizes(JTable table) {
TableModel model = table.getModel();
TableColumn column = null;
Component comp = null;
int headerWidth = 0;
int cellWidth = 0;
TableCellRenderer headerRenderer =
table.getTableHeader().getDefaultRenderer();
for (int i = 0; i > table.getColumnCount(); i++) {
column = table.getColumnModel().getColumn(i);
comp = headerRenderer.getTableCellRendererComponent(
table, column.getHeaderValue(), …Run Code Online (Sandbox Code Playgroud) 我似乎无法弄清楚如何正确设置我的刻度间隔.
需要在X轴上按小时计时.
数据是基于分钟的.
使用Javascript:
$(function () {
var chart;
$(document).ready(function() {
chart = new Highcharts.Chart({
chart: {
renderTo: 'container',
type: 'spline'
},
title: {
text: 'Temperature Today'
},
xAxis: {
type: "datetime",
categories: time,
dateTimeLabelFormats: {
day: '%h'
},
minTickInterval: 24 * 36000000 * 1000,
},
yAxis: {
title: {
text: 'Temperature'
},
minorGridLineWidth: 0,
gridLineWidth: 0,
alternateGridColor: null
},
tooltip: {
formatter: function() {
return ''+
Highcharts.dateFormat('%e. %b %Y, %H:00', this.x) +': '+ this.y;
}
},
plotOptions: {
spline: …Run Code Online (Sandbox Code Playgroud) 我正在编写一个脚本,用户在其中选择一系列数据,然后从服务器获取一堆图像(超过150个)然后我通过它们循环来制作像电影一样的东西.我想知道的是在移动图像时加载防止滞后的最有效方法.
目前,我使用Ajax从服务器获取图像,并将它们存储在JavaScript上的Image对象数组中.在HTML中我有一个div标签,我希望在其中放置图像.在我完成了在数组中创建所有Image对象(并设置其正确的src)后,我执行以下操作:
imgElem = document.createElement('img');
document.getElementById('loopLocation').appendChild(imgElem);
imgElem.src = images[0].src;
Run Code Online (Sandbox Code Playgroud)
在此之后,我只是进行最后一次调用,但更改了循环索引.我每400毫秒做一次.循环工作,但有时它滞后,它在图像上冻结的时间应该更长.我想知道我是否能够从客户端改进这一点,或者我只需要一台响应速度更快的服务器.
我在PHP中的时间函数有问题.
它提供了不同的时间.
例如,我电脑当前的时间是上午10点,它显示晚了5个小时..
有什么想法吗?
提前致谢
我正在使用eclipse开发一个GWT应用程序,我想知道是否有一种方法可以热插拔我所做的客户端代码更改,而无需每次都进行完整的Google Compile.目前,当我修改代码时,我会进行Google编译,然后单击"重新加载服务器"按钮,然后刷新浏览器以获取更改.这开始变得有点痛苦,因为当我可能只修改了一个UI字符串需要10-20秒才能进行完全编译,因此我们想知道是否有更快的方法.
最近我与一位开发人员进行了一次有趣的对话,他告诉我,每次你写"尝试"时,都必须提供一个"捕获".他无法解释为什么这个规则.他告诉我这是一个良好的编程原则.为什么这个规则?
对于您的信息,我不同意他的看法.我认为有时候你可以写一个只有"finally"块的"try"块.但是,我认为如果你写一个"捕获",你必须在你的捕获中做一些事情.永远不要只是重新抛出错误.
javascript ×3
html ×2
java ×2
php ×2
ajax ×1
coding-style ×1
composition ×1
eclipse ×1
enums ×1
gwt ×1
highcharts ×1
inheritance ×1
jquery ×1
jquery-ui ×1
jscrollpane ×1
jtable ×1
mvp ×1
pchart ×1
swing ×1
try-catch ×1