修理工場向けの実際のビジネスアプリケーションを開発することにより、OOP、具体的にはJavaを学んでいます。私はアプリケーションのGUI要素のMVCパターン設計に従いました。私の入力ダイアログコントローラークラスには多くの責任があるのだろうかと思っていました。 ComboBoxモデル、ボタンActionListenersを設定し、ユーザー入力を確認し、入力エラーを表示し、モデルにデータを保存します。それは多くの責任に関係していますか、それとも実際には単一の責任であり、ビューとモデルを結び付けていますか?このウェブサイトで this topic を知っています。
================================================== =========================
これは、すべての入力ダイアログコントローラーのスーパークラスである、抽象的な入力ダイアログコントローラークラスです。 IDラベル値の設定、[追加]ボタンと[キャンセル]ボタンのActionListenerの設定を担当し、データを保存する入力コントローラーの主な機能を備えています。
public abstract class InputDialogController implements WindowController
{
protected DataType dataType;
protected int id;
protected InputDialog gui;
protected InputDialogController(WindowController owner, DataType dataType)
{
this.dataType = dataType;
gui = InputDialogFactory.getWindow(owner.getWindow(), dataType);
id = IDGenerator.getNewID(dataType);
gui.getIdPanel().setIdValue(IDGenerator.formatRegularID(id));
gui.getInputButtonPanel().setBtnAddActionListener(ActionListenerFactory.saveData(this));
gui.getInputButtonPanel().setBtnCancelActionListener(ActionListenerFactory.closeWindow(this));
}
@Override
public Window getWindow()
{
return (Window) gui;
}
public void trySavingDataElement()
{
if(isInputValid())
{
DataManager.save(createDataElement());
getWindow().dispose();
}
else
{
showInputErrors();
}
}
protected abstract boolean isInputValid();
protected abstract DataElement createDataElement();
protected abstract void showInputErrors();
}
これは私の具体的な入力ダイアログコントローラーの1つであるClientRegistrationControllerクラスです。
public class ClientRegistrationController extends InputDialogController
{
private ClientRegistrationDialog clientGUI;
public ClientRegistrationController(WindowController owner, DataType dataType)
{
super(owner, dataType);
clientGUI = (ClientRegistrationDialog) super.gui;
clientGUI.getMarketingPanel().setMarketingCmbModel(CmbModelFactory.getModel(dataType));
clientGUI.getMarketingPanel()
.setBtnMarketingActionListener(ActionListenerFactory
.openNewWindow(this, DataType.MARKETING_TYPE));
}
public void updateComboBoxes(String item)
{
clientGUI.getMarketingPanel().setMarketing(item);
}
@Override
protected boolean isInputValid()
{
return isNameValid()
&& isPhoneNumberValid()
&& isMarketingSelected();
}
private boolean isNameValid( )
{
return !("".equals(clientGUI.getPersonalInfoPanel().getName()));
}
private boolean isPhoneNumberValid()
{
String phoneNumber = clientGUI.getPersonalInfoPanel().getPrimePhoneNumber();
return !(DataManager.clientsDataTable.uniqueStringCollision(phoneNumber)
|| ("".equals(phoneNumber)));
}
private boolean isMarketingSelected()
{
return clientGUI.getMarketingPanel().getMarketing() != "";
}
@Override
protected Client createDataElement()
{
Client newClient= new Client();
newClient.setId(id);
newClient.setName(clientGUI.getPersonalInfoPanel().getName());
newClient.setPrimePhoneNumber(clientGUI.getPersonalInfoPanel().getPrimePhoneNumber());
newClient.setAlternativePhoneNumber(clientGUI.getPersonalInfoPanel().getAltPoneNumber());
newClient.setEmail(clientGUI.getPersonalInfoPanel().getEmail());
newClient.setAddress(clientGUI.getPersonalInfoPanel().getAddress());
newClient.setMarketing(DataElementGetter.getMarketing(clientGUI.getMarketingPanel().getMarketing()));
return newClient;
}
@Override
protected void showInputErrors()
{
checkName();
checkPhoneNumber();
checkMarketing();
}
private void checkName()
{
if(isNameValid())
{
clientGUI.getPersonalInfoPanel().showNameDefault();
}
else
{
clientGUI.getPersonalInfoPanel().showNameError();
}
}
private void checkPhoneNumber()
{
if(isPhoneNumberValid())
{
clientGUI.getPersonalInfoPanel().showPhoneDefault();
}
else
{
clientGUI.getPersonalInfoPanel().showPhoneError();
}
}
private void checkMarketing()
{
if(isMarketingSelected())
{
clientGUI.getMarketingPanel().showMarketingDefault();
}
else
{
clientGUI.getMarketingPanel().showMarketingError();
}
}
}
MVCパターンを間違った方法で実装していますか?それをどのように行う必要がありますか?
MVCパターンを実装/使用するには、使用するテクノロジーや個人の好みに応じて、いくつかの正しい方法があります。
MVCパターンの最も重要な側面は、allユーザーインタラクションに関連するコードが、コントローラー部分またはビュー部分、あるいはその両方に限定されることです。つまり、モデルパーツに変更を加えることなく、完全に異なるUI(たとえば、web-ui)を作成できるはずです。
どのコードをコントローラーに入れ、どのコードをビューに入れるかは、ユーザーと使用するGUIフレームワークの設計者がビュー部分にロジックを持つことの快適さに大きく依存します。あなたが提示したコントローラーコードは、ほとんどロジックを含まず完全に有効なビューとペアになっているコントローラーとかなり一致しています。