Обернуть условное выражение в функцию или вообще не представлять его на диаграмме последовательности?

У меня есть этот класс контроллера PHP (принадлежит к пакету Symfony2):

class ReptoolController extends PageController
{
    // ...

    private function _get($request, $action, $case)
    {
        $app_id = $this->getRequested('app_id');
        if( ( $repappConfig = $this->getDoctrine()->getRepository('PDOneBundle:RepappConfig')->findOneBy(array("app_id"=>$app_id))) )
        {
            $current_timestamp = new \DateTime(date('Y-m-d'));
            if($repappConfig->getExpireDate())
                $expire_date = $repappConfig->getExpireDate()->getTimestamp();
            else
            {
                $temp = $current_timestamp;
                $temp->modify("+7 day");
                $temp->format("Y-m-d");
                $expire_date = $temp->getTimestamp();
            }
            if($expire_date < $current_timestamp->getTimestamp())
            {
                $response = new \stdClass();
                $response->status = FormUtilities::RESPONSE_STATUS_BAD;
                $controller_response = new Response( json_encode($response) );
                $controller_response->headers->set('Content-Type', 'application/json; charset=utf-8');
                return $controller_response;
            }
        }

        switch($case)
        {
            // ...
            case FormUtilities::CASE_BRAND_CUSTOM_MESSAGES:
                return $this->getBrandCustomMessages($request, $action, $case);
                break;
            // ...
            default:
                $response = new \stdClass();
                $response->status = FormUtilities::RESPONSE_STATUS_BAD;
                $controller_response = new Response( json_encode($response) );
                $controller_response->headers->set('Content-Type', 'application/json; charset=utf-8');
                return $controller_response;
                break;
        }
    }

    // ...

    private function getBrandCustomMessages($request, $action, $case)
    {
        $id = $this->getRequested('app_id');
        $reptool_records = $this->getRequestedSync();

        $response = new \stdClass();
        $response->status = FormUtilities::RESPONSE_STATUS_BAD;

        $repappConfig = new RepappConfig();
        $repappConfig = $this->getDoctrine()->getRepository('PDOneBundle:RepappConfig')->findOneBy(array("app_id"=>$id));
        $project_id = $repappConfig->getProjectId();
        $brand_table = $this->getDoctrine()->getRepository('PDOneBundle:Brand')->findBy(array("project"=>$project_id));

        if($brand_table)
        {
            foreach($brand_table as $bt)
            {
                $brand_id = $bt->getID();

                    $brandCustomMessages = new BrandCustomMessages();
                    if( $brandCustomMessages = $this->getDoctrine()->getRepository('PDOneBundle:BrandCustomMessages')->findBy(array("brand_id"=>$brand_id) ))
                    {
                        $sync = array();
                        foreach ($brandCustomMessages as $brandCustomMessage)
                        {

                            $response->status = FormUtilities::RESPONSE_STATUS_VALID;

                            $brandCustMess = new PDOneResponse(
                                                                                    $brandCustomMessage->getID(),
                                                                                    strtotime($brandCustomMessage->getModifiedAt()->format("Y-m-d H:i:s"))
                                                                                    );


                            $brandCustMess->id = $brandCustomMessage->getID();
                            $brandCustMess->message_text = $brandCustomMessage->getMessageText();
                            $brandCustMess->message_code = $brandCustomMessage->getMessageCode();
                            $brandCustMess->brand_id = (int)$brandCustomMessage->getBrandId();

                            $reptool_records = $brandCustMess->setRecordStatus($reptool_records);

                            // ADD BACKEND RECORD TO SYNC
                            if($brandCustMess->status != FormUtilities::RESPONSE_STATUS_OK ) $sync[] = $brandCustMess;
                        }
                        // COMPOSITE SYNC WITH REPTOOL RECORDS
                        $sync = PDOneResponse::compositeSync($sync, $reptool_records);
                        $response->sync = $sync;

                    }

            }
        }

        $controller_response = new Response( json_encode($response) );
        $controller_response->headers->set('Content-Type', 'application/json; charset=utf-8');
        return $controller_response;
    }

    // ...

Мне нужно построить диаграмму последовательности (SD) для потока от актора PDOneApp (который представляет собой приложение iPad, отправляющее get|set запрос к этому контроллеру). Вот что я сделал в SD Version1, SD версии 2:

Версия 1

введите здесь описание изображения

Версия 2

введите здесь описание изображения

По поводу диаграмм, показанных выше, у меня есть следующие сомнения, и в качестве примера приведенный выше код также:

  • Какая схема правильная?

  • Вызовы (имеется в виду представление на диаграмме) для сущностей: RepappConfig и Brand верны? В коде эти вызовы выполняются из метода getBrandCustomMessages(), и я получаю их непосредственно из контроллера ReptoolController, что заставляет меня думать, что это неправильно. Если это так, как они должны быть представлены?

  • Я знаю, что SD не предназначен для представления кода как есть, но как вы представляете условные выражения для функции? Возможно, я могу обернуть условное выражение в функцию и вызвать эту функцию из getBrandCustomMessages() правильно ли это? Что вы мне порекомендовали в связи с этим сомнением?

  • Как вы увидите в функции, последний возврат — это объект Response, правильно ли эта часть показана на диаграмме? Или строка должна быть заштрихована меткой возврата?

Может ли кто-нибудь помочь закончить эту диаграмму и понять часть conditional для UML SD?


person ReynierPM    schedule 18.03.2015    source источник


Ответы (1)


Ваша вторая диаграмма правильно показывает внутренний вызов getBrandCustomMessages.

Если вы действительно хотите показать if, используйте фрагменты (http://www.uml-diagrams.org/sequence-diagrams-combined-fragment.html). Вы можете разделить фрагменты на отдельные разделы (if/else или case; что подходит).

Последний ответ должен идти не сущности, а как ответное сообщение (после внутреннего вызова) действующему лицу. Скорее всего, это то, что вы хотели показать.

person qwerty_so    schedule 18.03.2015