Как получить значение из Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable в контроллере mvc

Другие ответы, похоже, были сфокусированы на объяснении того, почему неизменяемость хороша. Это очень хорошо, и я использую его, когда это возможно. Однако это не ваш вопрос . Я возьму ваш вопрос по пунктам, чтобы убедиться, что вы получаете ответы и примеры, которые вам нужны.

Я не могу получить то, что является сценариями, в которых нам нужен неизменный класс .

«Need» - относительный термин здесь. Неизменяемые классы - это шаблон дизайна, который, как и любая парадигма / шаблон / инструмент, позволяет упростить создание программного обеспечения. Точно так же много кода было написано до того, как появилась парадигма OO, но посчитайте меня среди программистов, которые «нуждаются» OO. Неизменяемые классы, такие как OO, не являются строго необходимыми , но я буду действовать так, как они мне нужны.

Вы когда-нибудь сталкивались с таким требованием?

Если вы не смотрите объекты в проблемной области с правильной перспективой, вы можете не увидеть требование для неизменяемого объекта. Было бы легко подумать, что проблемная область не требует любых любых неизменяемых классов, если вы не знакомы, когда их использовать выгодно.

Я часто использую неизменяемые классы, где я подумайте об определенном объекте в моей проблемной области как значение или фиксированный экземпляр. Это понятие иногда зависит от перспективы или точки зрения, но в идеале легко будет переключиться в правильную перспективу для идентификации хороших объектов-кандидатов.

Вы можете лучше понять, где неизменяемые объекты действительно полезно (если не строго необходимо), убедившись, что вы читаете в разных книгах / онлайн-статьях, чтобы развить здравый смысл о том, как думать о непреложных занятиях. Одна хорошая статья, чтобы вы начали: Теория и практика Java: мутировать или не мутировать?

Я попытаюсь привести несколько примеров ниже того, как можно видеть объекты в разных перспективах (изменяемые и неизменные), чтобы уточнить, что я имею в виду под перспективой.

... можете ли вы привести нам какой-либо реальный пример, где мы должны использовать этот шаблон.

Поскольку вы попросили дать реальные примеры, я дам вам некоторые, но сначала начнем с некоторых классических примеров.

Классические объекты значения

Строки и целые числа и часто считаются ценностями. Поэтому неудивительно, что класс String и класс оболочки Integer (а также другие классы-оболочки) неизменяемы в Java. Цвет обычно считается значением, поэтому неизменный класс Color.

Counterexample

Напротив, автомобиль обычно не рассматривается как объект ценности. Моделирование автомобиля обычно означает создание класса, который меняет состояние (одометр, скорость, уровень топлива и т. Д.). Тем не менее, есть некоторые домены, где автомобиль может быть объектом ценности. Например, автомобиль (или, в частности, модель автомобиля) можно рассматривать как объект ценности в приложении для поиска правильного моторного масла для данного автомобиля.

Игральные карты

Когда-нибудь пишете программу игровых карт? Я сделал. Я мог бы представить игральную карту как изменчивый объект с изменчивым костюмом и рангом. Рука ничьей-покера может быть 5 фиксированных экземпляров, где замена пятой карты в моей руке означала бы переустановку экземпляра пятой игровой карты на новую карту, изменив ее костюм и ранги ivars.

Однако я склонен подумайте о игральной карте как непреложном объекте, у которого есть фиксированный неизменный костюм и ранг после создания. Моя рука в покере будет 5 экземпляров, и замена карты в моей руке приведет к отбрасыванию одного из этих экземпляров и добавлению нового случайного экземпляра в мою руку.

Map Projection

Последний Например, когда я работал над некоторым кодом карты, где карта могла отображаться в различных проекциях . В исходном коде карта использовала фиксированный, но мутируемый экземпляр проекции (например, измененную игровую карту выше). Изменение проекции карты означало мутирование иваров экземпляра проекции карты (тип проекции, центральная точка, масштабирование и т. Д.).

Однако я чувствовал, что дизайн был проще, если я думал о проекции как неизменяемом значении или фиксированном пример. Изменение проекции карты означало наличие ссылки на карту другого экземпляра проекции, а не мутирования фиксированного проекционного экземпляра карты. Это также упростило захват названных проекций, таких как MERCATOR_WORLD_VIEW.

1
задан karan 18 January 2019 в 11:22
поделиться