В колледже я взял урок по современной физике, в котором мы узнали об особой теории относительности.Я был полностью потрясен тем, как разные системы отсчета могут реально наблюдать, как физические свойства объекта различны и не могут быть неверными.Со временем эта концепция постепенно меняла способ программирования, и теперь я стремлюсь разбить классы на 2 основные категории: объекты данных и объекты наблюдения (только для функций).
Радиэто не превращается в сложный и длинный пост для такого простого вопроса, я попытаюсь объяснить, что я имею в виду, на двух примерах.
Во-первых, возьмем, к примеру, такой тип кода, который я часто писал:
class Deck
{
private Card[] cards;
public void Shuffle()
{
// shuffle algorithm
}
// other deck related functions like draw, cut, etc...
}
Обычно я пишу такой же сценарий, как:
class Deck
{
// by intention, i just mean some kind of immutable collection of cards
private ReadonlyCollection<Card> _Cards;
public Card[] Cards { get { return this._Cards; } }
}
interface IDeckHandler
{
Deck Shuffle(Deck deck);
// other deck related functions like draw, cut, etc..
}
class Dealer : IDeckHandler
{
// IDeckHandler implementation
}
Deck
больше не отвечает за реализацию функций, которые могут на него воздействовать.Или, чтобы соответствовать терминологии, колода - это просто набор значений, а то, как она соблюдается, является обязанностью наблюдателя.Естественно, может быть много наблюдателей, которые выполняют действия по-разному.
Во втором примере я воспользуюсь тем, что людям, которым я пытался объяснить это, было легче.Возьмем ситуацию, когда у нас есть цветные буквы на цветной бумаге, которые пишут слово.У нас есть агент, который обязан прочитать слово на бумаге.Теперь предположим, что агент - это какой-то тип дальтоников.Изображение, испускаемое из бумаги, то же самое, но восприятие может быть другим.Наблюдатель не обладает глубокими знаниями об объекте и не может изменить его, а лишь отвечает на него толкованием.
Как я уже говорил, эта концепция определяет многие из моих решений по развитию.Итак, вернемся к вопросу, является ли это опубликованным типом программирования, и если да, то можете ли вы указать мне некоторую литературу по этому вопросу ?Я сталкивался с некоторыми распространенными и необычными сценариями, по которым трудно принимать решения, и, конечно, с некоторыми вещами, о которых я только не думал или не сталкивался, которые, я надеюсь, были бы рассмотрены в литературе.