У меня возникли проблемы с проектированием модуля, может ли кто-нибудь мне помочь?Какой шаблон дизайна и как его использовать с помощью ООП в этом сценарии
Поскольку это будет трудно поддерживать этот модуль, я также думаю, что это может проверить мое мастерство использования шаблонов дизайна.
Требование
Это в основном сельскохозяйственный проект (веб-приложение). Мне нужно создать модуль, в котором происходят некоторые вычисления.
Существуют различные культуры, такие как кукуруза, помидор, окра и т. Д. Каждая из этих культур имеет разные черты.
Каждая черта имеет шкалу измерения, которая находится в целочисленном размере, таком как 200-1000. Теперь предположим, что я посадил урожай и сделал измерения, отмеченные чертами. Теперь я хочу сделать какое-то измерение. Некоторые измерения просты, а некоторые сложны.
Пример
Давайте пример культур кукурузы. Я записал наблюдения по 15 признакам. (Мы будем использовать trait1-trait15 в качестве примера, фактическое имя может быть как plt_ht, YLD и т.д.)
я записал 5 наблюдений для каждого признака:
trait1 trait2 trait3 trait5 trait6..... trait15
01,02,03,04 01,02,03,04 01,02,03,04
журналы пользователей в систему и отбирает своих культур и вводит данные для этих наблюдений. Я должен вычислить либо среднее значение, либо сумму данных, введенных для каждого признака.
Сложность/центр проблемы
До сих пор это простой, но сложности возникают, когда у меня есть несколько различных формул для некоторых признаков.
Пример: черта YLD имеет формулу, на основе которой я должен вычислить ее значение, что также может зависеть от некоторых других признаков. У каждого другого урожая могут быть разные черты.
Все, что я могу сделать - всякий раз, когда пользователь выбирает обрезку, я проверю эти конкретные черты и выполняю вычисления (если это не особый признак, то я либо усредняю, либо суммирую его, основываясь на записи db), но есть много жесткого кодирования. Я хотел бы иметь предложения по более эффективному обращению с этим.
Мой код должен обрабатывать как простые, так и сложные вычисления. Простые вычисления легки, я беру среднее значение, введенное для характеристики. Проблема возникает, когда мне приходится выполнять сложные вычисления, так как каждый урожай имеет разные черты с собственными формулами, поэтому для расчета я должен проверять урожай, а затем на сложный признак. Поэтому мне нужно жестко указать имя признака сложных признаков. Может ли кто-нибудь сказать мне, как я могу создать это с помощью Java oops [?!?], Чтобы я мог сделать его общим?
У меня около 10 различных культур. Некоторые расчеты являются специфическими для сельскохозяйственных культур, так что будет много кода, как если ниже:
hasZeroValue = (HashMap<String, ArrayList<String>>) dataValues[1];
} else if(cropId.equalsIgnoreCase("TO") && traitName.equalsIgnoreCase("TLSSG_70")) {
traitAvg=calculateTLCV(traitName, traitAvg,dataPoint, dataTraits, hybrid, repl, traitValues, dataPvalues,50);
} else if(cropId.equalsIgnoreCase("TO") && traitName.equalsIgnoreCase("TLSSG_100")) {
traitAvg=calculateTLCV(traitName, traitAvg,dataPoint, dataTraits, hybrid, repl, traitValues, dataPvalues,50);
} else if(cropId.equalsIgnoreCase("TO") && traitName.equalsIgnoreCase("YVMV_60")) {
traitAvg=tomatoYVMVCalculation(traitName, traitAvg,dataPoint, dataTraits, hybrid, repl, traitValues, dataPvalues);
} else if(cropId.equalsIgnoreCase("TO") && traitName.equalsIgnoreCase("YVMV_90")) {
traitAvg=tomatoYVMVCalculation(traitName, traitAvg,dataPoint, dataTraits, hybrid, repl, traitValues, dataPvalues);
} else if(cropId.equalsIgnoreCase("TO") && traitName.equalsIgnoreCase("YVMV_120")) {
traitAvg=tomatoYVMVCalculation(traitName, traitAvg,dataPoint, dataTraits, hybrid, repl, traitValues, dataPvalues);
} else if(cropId.equalsIgnoreCase("TO") && traitName.equalsIgnoreCase("ELCV_60")) {
traitAvg=tomatoYVMVCalculation(traitName, traitAvg,dataPoint, dataTraits, hybrid, repl, traitValues, dataPvalues);
} else if(cropId.equalsIgnoreCase("TO") && traitName.equalsIgnoreCase("ELCV_90")) {
traitAvg=tomatoYVMVCalculation(traitName, traitAvg,dataPoint, dataTraits, hybrid, repl, traitValues, dataPvalues);
} else if(cropId.equalsIgnoreCase("TO") && traitName.equalsIgnoreCase("ELCV_120")) {
traitAvg=tomatoYVMVCalculation(traitName, traitAvg,dataPoint, dataTraits, hybrid, repl, traitValues, dataPvalues);
} else if(cropId.equalsIgnoreCase("OK") && traitName.equalsIgnoreCase("YVMV_60")) {
traitAvg=tomatoYVMVCalculation(traitName, traitAvg,dataPoint, dataTraits, hybrid, repl, traitValues, dataPvalues);
} else if(cropId.equalsIgnoreCase("OK") && traitName.equalsIgnoreCase("YVMV_90")) {
traitAvg=tomatoYVMVCalculation(traitName, traitAvg,dataPoint, dataTraits, hybrid, repl, traitValues, dataPvalues);
} else if(cropId.equalsIgnoreCase("OK") && traitName.equalsIgnoreCase("YVMV_120")) {
traitAvg=tomatoYVMVCalculation(traitName, traitAvg, dataPoint, dataTraits, hybrid, repl, traitValues, dataPvalues);
} else if(cropId.equalsIgnoreCase("OK") && traitName.equalsIgnoreCase("ELCV_60")) {
Если класс будет написана на урожай, думать о нем, как приложение, которое поддерживает 109 культур, теперь каждый пользователь входит в систему, У меня есть ссылка, где он может сделать это выше упражнений, было бы лучше, чтобы урожай был одним классом. Для этого может быть 100 черт на каждый урожай. Пожалуйста, дайте мне знать.
Я добавил несколько пунктов в конце queestion above.Please посмотрите на него. – Vividata
@vividata это решение должно охватывать это редактирование – Pureferret