【发布时间】:2009-09-09 10:48:00
【问题描述】:
在一个针对尽可能多的功能手机(诺基亚3110 Classic、三星E250、摩托罗拉SLVR L7等)的项目中,在代码结构方面应该如何设计?我并不是指每台手机的支持,因为我们为此使用波兰语。
我是一名经验丰富的 C# 开发人员,正在我的公司从事 J2ME 开发。几个月前,管理层聘请了一位高级 J2ME 开发人员,因为现有的开发人员缺乏任何 J2ME 经验。我现在正与另一位 C# 开发人员一起加入该团队,我们都对我们所看到的有所保留。虽然软件运行并满足业务需求,但应用程序的设计对我来说似乎完全错误。
由于“手机上的内存限制”,大多数代码不是使用 OO,而是由静态方法和常量组成,并且在尽可能少的类中(据我所知是 15 个)。其中一些长达数千行。显然,除了 Canvas 之外,没有使用任何内置 UI 元素,因为它们“没有提供足够的控制”。
所有表单/窗口/页面(不确定正确的术语)在一个类中都有一个静态方法,我们在其中有代码来设置该表单/窗口/页面的 UI。如下:
UiElement items[] = new UiElement[8 + (fieldCount * 4)];
int y = 0;
items[y++] = new UiElement("name", UiElement.TYPE_TEXT_FIELD, "Name", TextField.ANY, true, "", true, null, -1, 0);
items[y++] = new UiElement("address", UiElement.TYPE_TEXT_FIELD, "Mobile", TextField.PHONENUMBER, true, "", true, null, -1, 0);
// ...
items[y++] = UiElement.LINE;
items[y++] = new UiElement("button", UiElement.TYPE_BUTTON, "Save", -1, false, "", true, null, UiElement.TYPE_LINK, ActionHandler.LINK_UPDATE_USER);
items[y++] = new UiElement("", UiElement.TYPE_RED_BUTTON, "Delete user", -1, false, "", true, null, UiElement.TYPE_LINK, ActionHandler.LINK_DELETE_USER);
items[y++] = UiElement.LINE;
items[y++] = new UiElement("", UiElement.TYPE_LINK_ARROWS, "Back to choose category", 0, false, "", true, null, -1, ActionHandler.LINK_MC_SELECT_CATEGORY);
items[y++] = UiElement.LINE;
UiElement 的主要构造函数是
public UiElement(String RMSref, int inputType, String displayText, int additionalInputType, boolean mandatory, String aditional, boolean selectable, Image img, int displayType, int actionLink)
最后,调用将 items 数组保存在扩展 Canvas 的类上。该类有一个带有巨大开关块的绘制方法,在 UiElement 的 inputType 上分支。从那里,它转到“图形”类上的静态方法,该方法为每种不同类型的“控件”提供方法来处理该“控件”的绘画。
实际上,似乎一切都是程序化的,并且只在必要时使用 OO。我问高级开发人员为什么我们没有一个基本的 Control 类,然后是它的子类,每个都有独立的绘画、属性等,而不是这个通用的 UiElement 类,这显然是因为很多类占用太多内存。我还被告知有些手机有错误的 Java 运行时,因此它们不能正确释放内存。这也是只有一个 Canvas 的原因。
作为另一个例子,所有的文本输出都是通过使用位图字体完成的,而不是使用手机的内部字体渲染。有人告诉我们,这是为了提供跨手机的统一渲染,而不是依赖于它们的内部字体集和大小。
这是正确的做法吗?我们被告知的事情是正确的吗?我希望尽量避免这变成对 TheDailyWTF 的提交。
【问题讨论】:
-
我会听你的高级 J2ME 开发人员的意见,因为他听起来很清楚自己正在为目标平台做什么。并且,希望他不要认为这样说他的设计(这正是任何优秀的 J2ME 会做的)应该是 Daily WTF 是一种侮辱。
-
校对我的问题后,它开始读起来像一篇 TDWTF 文章,只漏掉了典型的妙语“直到为时已晚,没有人知道更好”。这就是我要问的原因 - 老实说,我不知道更好,欢迎反馈他的模式是否是正确的做事方式。我并不是在挖苦他,如果遇到这种情况,我很抱歉。
标签: java-me