Идея такого подхода заключается в том, что Order содержит только информацию, необходимую для заказа. (идентификатор заказа, цена и т. д.) и отделен от логики его сохранения, за которую отвечает Сервис. (Может случиться так, что один IOrderService сохраняет в SQL, а другой в текстовый файл, например, и в этом случае этот шаблон также необходим для принципа открытости/закрытости).
Если, однако, мы хотим сохранить заказ (или проверить заказ может иметь больше смысла в этом контексте) только один раз за время существования экземпляра, то, похоже, нам нужен флаг isValidated, чтобы жить в заказе, чтобы мы могли прочитать order.IsValidated, чтобы увидеть, нужно ли нам его сохранить или нет.
Пример реализации того, как, по моему мнению, это следует сделать, приведен ниже:
Код: Выделить всё
public interface IOrder
{
int OrderID { get; }
int NumberOfPieces { get; }
bool IsValidated { get; }
}
public interface IValidate
{
void SetValidated();
}
public class Order : IOrder, IValidate
{
public int OrderID { get; private set; }
public int NumberOfPieces { get; private set; }
private bool _isValidated = false;
public bool IsValidated
{
get { return _isValidated; }
private set { _isValidated = value; }
}
public void SetValidated()
{
_isValidated = true;
}
}
public interface IOrderService
{
void Validate(IOrder order);
}
public class OrderService : IOrderService
{
public void Validate(IOrder order)
{
if (order is IValidate v)
{
DoValidateWork(order);
v.SetValidated();
}
}
private bool DoValidateWork(IOrder order)
{
//validation logic
return true;
}
}
Существует ли стандартный способ инкапсуляции флага isValidated, чтобы только OrderService мог его обновлять?
/>Из того, что я читал, вложение классов — это плохая практика, и когда я спрашиваю ИИ, он говорит мне поместить Order/OrderService в его собственную сборку и пометить его как внутренний, что выглядит абсолютно нелепо.
Если у кого-то есть какие-либо советы или идеи по поводу лучших шаблонов (или причин, по которым приведение типов как IValidated — хорошее решение, чтобы успокоить мои опасения по этому поводу), я ценю ваши мысли.
Спасибо всем за чтение.
Подробнее здесь: https://stackoverflow.com/questions/798 ... ngle-respo
Мобильная версия