У меня есть класс, который отслеживает изменения свойствБезопасность/Проверка на с изменением # собственности N-Tier
public class Property
{
object _OriginalValue;
object _ProposedValue;
DateTime _ProposedDateTime;
List<Property> _History = new List<Property>();
public object OriginalValue
{
get
{
return _OriginalValue;
}
set
{
_OriginalValue = value;
}
}
public object ProposedValue
{
get
{
return _ProposedValue;
}
set
{
_ProposedDateTime = DateTime.Now;
_ProposedValue = value;
}
}
public bool IsDirty
{
get
{
if (OriginalValue != ProposedValue)
{
return true;
}
else
{
return false;
}
}
}
}
Это свойство может быть использовано классами как
public class Customer
{
protected Property _FirstName = new Property();
public string FirstName
{
get
{
return (string)_FirstName.ProposedValue;
}
set
{
_FirstName.ProposedValue = value;
}
}
public object GetOriginalValue(Property Property)
{
return Property.OriginalValue;
}
}
Вопрос заключается в том, является существует ли способ обеспечить первоначальное значение при передаче этого клиенту в архитектуре N-уровня?
Когда клиент передает Клиенту обратно в Границу обслуживания - по умолчанию вы не можете доверять клиенту. Вам нужно либо перезагрузить исходные значения из базы данных, либо подтвердить, что исходные значения неактивны. Конечно, я предполагаю, что мы будем использовать бизнес-логику, основанную на текущих значениях в клиенте, чтобы отклонить или разрешить операцию обновления.
Пример:
Пользователь вставляет запись с именем Боба.
Пользователь извлекает запись с именем Bob и меняет имя на Ted. Исходным значением является Боб, предлагаемое значение - Ted.
Пользователь отправляет Заказчика в службу обновления Клиента.
Все хорошо.
* В настоящее время бизнес-правило закодировано в службу, в которой говорится, что если имя клиента Ted - разрешить повторному обновлению исключить исключение «невозможно обновить». *
Пользователь извлекает запись с именем Ted. Пользователь меняет имя на Darren. Пользователь меняет имя обратно на Ted - исключает систему. Пользователь выбирает Тед. Пользователь читает и использует инструмент для изменения свойства OriginalPropertyValue на клиенте. Сервер не обновляет исходную базу данных из базы данных и просто считывает исходный валид, исходящий от клиента.
Пользователь обходит бизнес-правило.
Вы можете посмотреть на [TrackerDog] (http://matiasfidemraizer.com/trackerdog) ([GitHub хранилище] (https://github.com/mfidemraizer/trackerdog)). Я чувствую, что это сильно очистит ваш код :) –
Совершенно без темы. Предоставленный код - это просто продемонстрировать идею и не является фактическим производственным кодом. Благодарю. – Watson
Не стесняйтесь публиковать решение, используя TrackerDog в качестве примера. Внесите изменения на клиенте, передайте изменения на сервер и подтвердите, что клиент не изменил никаких исходных значений, установленных базой данных, или не имеет способа вставить текущие значения из базы данных в исходные значения. – Watson