2008-11-29 2 views
1

Это часто ситуация, но вот последний пример:Как вы справляетесь исключительные случаи

Компании имеют различные контактные данные (адреса, номера телефонов, адреса электронной почты ...), когда они делают работу объявления, они флажки, где они выбирают, как с ними нужно связаться. Это в основном описательные данные. Пользователь при чтении объявления видит что-то вроде «Вы можете подать по почте, лично ...», , за исключением, если это «через веб-портал» или «по электронной почте», потому что тогда должны появиться соответствующие кнопки. Эти параметры хранятся в базе данных, и клиент (владелец сайта, а не компания, создающая объявление) может их изменить (например, они могут добавлять «по телепатии» или что-то еще), но если они вмешиваются в «электронную почту» и «сеть» -портальные "варианты, они закручивают свой веб-сайт.

Так как я должен обрабатывать данные, где все ведет себя одинаково, кроме «этой вещи», которая ведет себя так, и «эта вещь», которая ведет себя по-другому, а сами данные являются живыми, должны быть доступны для редактирования клиентом.

ответ

1

Вы отметили свой вопрос как «язык-агностик», и не все языки поддерживают полиморфизм, но так я и подхожу к этому.

Каждая опция имеет некоторый тип, а для разных типов требуются различные свойства. Тем не менее, каждый тип поддерживает какой-то метод «рендеринга», который может отображать метод контакта по мере необходимости. Поскольку свойства (номер телефона или веб-адрес и т. Д.) Зависят от типа, вы можете проверить ввод администратора при создании этих «объектов», чтобы убедиться, что необходимые данные предоставлены и действительны. Поскольку вы реализуете метод рендеринга, вместо того, чтобы выплевывать HTML, предоставленный пользователем, вы можете убедиться, что отображаемая страница верна. Он менее гибкий, но более безопасный и удобный для пользователя.

В базе данных у вас может быть одна редко заполненная таблица, в которой хранятся данные для всех типов контактов или «родительская» таблица с общими свойствами и подтаблицами с свойствами типа. Это зависит от того, сколько у вас типов и насколько они различны. В любом случае у вас будет какой-то индикатор типа, чтобы вы знали тип объекта, к которому должны привязываться данные.

1

Прежде всего, подумайте дважды, что вам действительно нужно. Причина проста. Вы должны обслуживать определенную потребность, а входные данные - это средство для предоставления этой услуги. Если данные не соответствуют существующему сервису, то какова его ценность и кто является потребителем этой конкретной информации?

Существует два возможных ответа: вы расширяете свою клиентскую базу или вам необходимо изменить существующую услугу из-за изменения спроса. В обоих случаях вам нужно задуматься о разработке бизнес-модели. Если вы описываете, какой сервис вам нужен, и какую информацию он должен предоставить, вы избежите большей части конкретных данных и получите четкие требования, которые легко реализовать в программном обеспечении.

0

Ну, если все это так, у вас есть два варианта, которые являются особыми, а затем все остальное обрабатывается одинаково, а затем сохраняйте ваши параметры в виде строк, и если один из двух специальных появляется в этом , затем отобразите соответствующий материал для этого специального элемента.

Просто проверьте свой список предметов для двух специальных. Ничего особенного.

0

Написал очень простой Rules Engine. Вы можете использовать реалистичную реализацию, или вы можете использовать ее самостоятельно. Поскольку ваш случай кажется таким простым, я склонен сворачивать свое, потому что это означает меньше зависимостей (YMMV).

1

Я бы рекомендовал resolution pattern для этого, основываясь на упоминании базы данных. Ссылка выше описывает это, но на самом деле это намного проще, чем кажется.Вы пишете запрос к базе данных, который возвращает все возможные параметры (например, вы читаете стандартные параметры и настраиваемые параметры вместе, используя, возможно, UNION или JOIN в зависимости от вашей схемы). Ключевое слово COALESCE SQL полезно для поиска первого ' разрешение "значения параметра, которое не равно NULL.

Смежные вопросы