MVVM: повышение исключений из бизнес-уровня в презентацию для отображения запроса - PullRequest
0 голосов
/ 12 сентября 2018

В нашей компании, ведущем разработчике системы точек продаж на основе MVVM, которую мы разрабатываем, в C #, .NET 3.5, было выбрано следующее для наилучшего решения для наших нужд:

1) Все периферийные устройства должны быть размещены на уровне представления, включая считыватель чеков, принтер чеков, почтовый ящик, почти все.Это правило.

2) Ожидается, что мы создадим подобный код на бизнес-уровне, который вызывается на уровне представления, пока он не перестанет генерировать исключения, и завершится:

public void DoPaymentAtEndOfTicket() {

     if(eCurrentState == enuStates.iSTART) {

         eCurrentState = enuStates.iCONTROL_MAXIMUM_AMOUNT_BREACHED;
         objController.Throw_Exception_To_UI_If_Maximum_Amount_Breached();         // might throw Exception to be handled by presentation layer
         eCurrentState = enuStates.iCHECK_MINIMUM_AMOUNT_BREACHED;  // Skip the control for max amount breached since no exception
     }

     if(eCurrentState == enuStates.iCONTROL_MAXIMUM_AMOUNT_BREACHED) {

         objController.Throw_Exception_To_UI_To_Request_Supervisor_Credentials();
         eCurrentState = enuStates.iCHECK_MINIMUM_AMOUNT_BREACHED;
     }

     if(eCurrentState == enuStates.iCHECK_MINIMUM_AMOUNT_BREACHED) {
         eCurrentState = enuStates.iCONTROL_MINIMUM_AMOUNT_BREACHED;
         objController.Throw_Exception_To_UI_If_Minimum_Amount_Breached();         // might throw Exception to be handled by presentation layer
         eCurrentState = enuStates.iSTART_READ_CHEQUE_SINCE_AMOUNT_OK;  // Skip the control for min amount breached since no exception             
     }

     if(eCurrentState == enuStates.iCONTROL_MINIMUM_AMOUNT_BREACHED) {

         objController.Throw_Exception_To_UI_To_Request_Supervisor_Credentials();
         eCurrentState = enuStates.iSTART_READ_CHEQUE_SINCE_AMOUNT_OK;
     }

     if(eCurrentState == enuStates.iSTART_READ_CHEQUE_SINCE_AMOUNT_OK) {

         eCurrentState = enuStates.iCHEQUE_READING_FINISHED_PROCESS_CMC7;

         throw new Presentation_Layer_Interacts_With_Cheque_Reader_Exception();
     }

     if(eCurrentState == enuStates.iCHEQUE_READING_FINISHED_PROCESS_CMC7){

         objController.ControlTheCheque(sCMC7NumberFromReaderInViewModel);
     }

}

3)Мой вопрос: как, если таковые имеются, есть ли вероятность того, что на профессиональном уровне это считается кодексом хорошего качества?Как мне попытаться убедить руководство в том, что мы на неправильном пути?(делает это в .NET 3.5)

...