Я проектировал класс, в котором я хотел, чтобы свойства были доступны в полной форме внутри класса, но только в очищенной форме снаружи. Моим первым решением было реализовать два разных get
элемента с разными правами доступа:
public class MyClass
{
private Foo CompleteFoo { get; set; }
public Foo SanitizedFoo => CompleteFoo.WithoutSensitiveInfo();
}
. По мере роста моего класса у него появилось много таких свойств, а также необходимость определять эти методы доступа для каждого значения. стал утомительным и сделал класс труднее читать. Поэтому я решил ввести вложенный вспомогательный класс:
public class MyClass
{
private class SanitizedValue<T> where T : Sanitizable
{
private T Complete { get; set; }
public T Sanitized => T.WithoutSensitiveInfo();
}
public SanitizedValue<Foo> foo { get; }
}
Теперь сам MyClass
имеет доступ к значениям Sanitized
и Complete
, но внешние пользователи имеют доступ только к значению Sanitized
.
Проблема в том, что я считаю этот класс SanitizedValue
довольно полезной утилитой, которую я, возможно, захочу использовать в различных классах для репликации шаблона прав доступа. Но поскольку SanitizedValue
должен быть внутренним по отношению к MyClass
, чтобы правильно разрешить доступ к свойству Complete
, кажется, что мне придется переписать класс SanitizedValue
для каждого родителя, который захочет его использовать.
Есть ли стратегия, позволяющая избежать такого дублирования внутреннего класса?