В проекте, ориентированном на максимально возможное количество телефонов-функций (Nokia 3110 Classic, Samsung E250, Motorola SLVR L7 и т. Д.), Как он должен быть разработан на высоком уровне с точки зрения структуры кода? Я не имею в виду поддержку на телефоне, потому что для этого мы используем польский.Хороший дизайн J2ME проекта
Я опытный разработчик C#, продвигающийся к разработке J2ME в моей компании. Несколько месяцев назад руководство наняло старшего разработчика J2ME, поскольку существующим разработчикам не хватало опыта J2ME. Теперь я присоединяюсь к этой команде с другим разработчиком C#, и у нас есть некоторые оговорки в отношении того, что мы видим. Хотя программное обеспечение работает и отвечает требованиям бизнеса, дизайн приложения кажется мне совершенно неправильным.
Вместо использования OO большая часть кода состоит из статических методов и констант и имеет как можно меньше классов (15, насколько я могу судить) из-за «ограничений памяти на мобильных телефонах». Некоторые из них составляют тысячи строк. По-видимому, ни один из встроенных элементов пользовательского интерфейса не используется, за исключением Canvas, поскольку они «не обеспечивают достаточного контроля».
Все формы/окна/страницы (не уверены в правильном термине) имеют статический метод в одном классе, в котором у нас есть код для настройки интерфейса этой формы/окна/страницы. Она заключается в следующем:
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)
В конце этого, вызов сделан, чтобы сохранить массив элементов на класс, который расширяет Canvas. У этого класса есть метод рисования с огромным блоком переключения, разветвляющийся по типу ввода UiElement. Оттуда он переходит к статическому методу класса «графика», который имеет методы для каждого типа «управления» для обработки этой «контрольной» картины.
Фактически, кажется, что все это процедурно, когда это возможно, и использует только OO, когда это необходимо. Я спросил старшего разработчика, почему у нас нет базового класса Control, а затем подклассы этого, каждый с самодостаточной живописью, свойствами и т. Д., А не этот общий класс UiElement, и, по-видимому, это связано с тем, что множество классов используйте слишком много памяти. Мне также сказали, что на некоторых телефонах есть багги Java-времени, так что они не освобождают память правильно. Это также является причиной того, что существует только один холст.
В качестве другого примера, весь вывод текста выполняется с использованием растровых шрифтов, а не с помощью внутренней визуализации шрифтов телефона. Нам сказали, что это обеспечить равномерный рендеринг через мобильные телефоны, а не полагаться на их внутренние шрифты и размеры.
Это правильный способ сделать это? Правильно ли это сказано? Я надеюсь попытаться избежать этого превращения в представление TheDailyWTF.
Я бы слушал вашего старшего разработчика J2ME, поскольку он звучит так, как будто он точно знает, что он делает для целевой платформы. И, надеюсь, он не видит этого, так как это действительно оскорбительно, чтобы сказать, что его дизайн, который является именно тем, что будет делать любой хороший J2ME, должен быть Daily WTF. – Fostah
Подтверждая мой вопрос, он начал читать, как статья TDWTF, пропустив только типичную перфомансу «И никто не знал ничего лучше, пока не стало слишком поздно». Вот почему я спрашиваю - я честно не знаю ничего лучше и приветствую отзывы о том, является ли его образ правильным способом делать что-то. Я не имею в виду его, как копать его, и извините, если это произойдет именно так. – 2009-09-09 13:13:10