Это действительно архитектурный вопрос.Я чувствую, что поступаю неправильно, и хотел получить информацию о лучших практиках.
Допустим, у меня есть таблица Transactions
и таблица TransactionTypes
.Представления отправят соответствующие данные транзакции, которые обрабатываются в моем контроллере.Проблема в том, что логика в контроллере может быть немного сложной, и TransactionType не предоставляется входами представления, а вычисляется в контроллере.(Это может быть частью моей проблемы).
Например, предположим, что представление отправляет ViewModel, который будет отображаться в TransactionType типа «Withdrawal».Тем не менее, контроллер обнаруживает, что ему необходимо изменить это на овердрафт ", так как средств недостаточно. То, что я не хочу сделать, это:
transaction.TypeId =
DataContext.TransactionTypes.Single(x => x.type == "Overdraft").id;
..... так как я буду встраивать строковые литералы в мой код. Верно?
ОК, поэтому я могу сопоставить значения со строгими типами, которые позволили бы мне сделать это:
class TranTypes
{
public const long Deposit = 1;
public const long Withdrawal = 2;
public const long Overdraft = 3;
}
...
transaction.TypeId =
DataContext.TransactionTypes.Single(x => x.id == TranTypes.Overdraft);
Теперь, если мои поиски меняются в БД, у меня есть одно место, где я могу обновить сопоставления, и мои контроллеры все еще имеют представление о модели.
Но это чувствуетсятоже неловко.
Мне кажется, что я действительно хочу, чтобы автоматическое генерирование кода Linq To SQL могло генерировать ассоциацию, чтобы я мог просто ссылаться на строго типизированные имена (Deposit, Withdrawal и Draft) и будьте уверены, что он всегда будет возвращать текущие значения для них в базе данных. Изменения, внесенные в таблицу поиска во время выполнения, могут привести к проблемам, но все равно она выглядит намного чище.
Что я должен перевариватьчтобы понять, как бЕсть смысл структурировать это?
Заранее спасибо за расширение моего мозга.: -)