Доступ к переменным от других пространств имен

Текущая нереляционная структура для модели данных состоит в том, что каждый документ представляет транспортное средство

blockquote>

Хорошо, давайте начнем с этого.

В описанной вами модели данных хранение документа уничтожает более раннюю копию.

Теперь представьте, что вместо этого мы хранили документ в git-хранилище. Затем сохранение документа также сохранит метаданные, и эти метаданные будут включать указатель на предыдущий документ.

1110 Конечно, в этом случае у нас много дублирования. Поэтому вместо того, чтобы каждый раз сохранять полный документ, мы будем хранить документ патча (например, JSON Patch ) и метаданные, указывающие на оригинальный патч.

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

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

Когда вам нужно восстановить текущее состояние, вы начинаете с известного вам состояния (которое может быть «нулевым» состоянием документа до того, как с ним что-нибудь случится), и воспроизводите на этом документе все патчи (события), которые произошло с тех пор.

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

По сути, когда вы ссылаетесь на более старую сборку, вы восстанавливаете документ, используя события, верно?

blockquote>

Да, именно так.

Так что все еще есть " текущий статус "документ или это считается плохой практикой?

blockquote>

" Это зависит ". В общем случае документ с текущим статусом отсутствует; только упорядоченный по списку список событий является" реальным " и все остальное вытекает из этого.

Беседы об источнике событий часто приводят к рассмотрению выделенных хранилищ сообщений для управления сохранением Кроме того, эти списки упорядочены, и хранилища сообщений также не поддерживают хранение документов. Таким образом, попытка сохранить «текущую версию» требует фиксации в двух разных магазинах.

В этот момент дизайнеры обычно либо решают, что «последняя версия» является достаточно хорошей, и в этом случае они создают в конечном итоге согласованные представления документов за пределами границы транзакции ... ИЛИ решают, что текущая версия важна, и обращаются к хранилищу. решения, которые поддерживают хранение текущей версии в той же транзакции, что и события (например: использование СУБД).

Какова процедура, используемая для создания снимка, который вы хотите использовать с помощью событий?

blockquote>

Если вы хотите сгенерировать снимок, то обычно вы будете использовать шаблон, называемый проекция для итерации по событиям и fold или reduce их для создания документа.

Грубо говоря, у вас где-то есть функция, похожая на

document-with-meta-data = projection(event-history-with-metadata)
7
задан Adonis L 26 March 2011 в 20:36
поделиться

3 ответа

Да, вы можете. У меня есть. Но стоит ли оно того?

Если вы делаете это для развлечения, оно того стоит.

Если вы делаете это для настоящего, пригодного для использования Mac, оно того не стоит.

Теперь у вас будет миллиард парней, которые скажут мне об этом, потому что некоторые парни создали действительно впечатляющие установки, но им не хватает Mac. Маки просто работают хорошо, и их приятно использовать, в то время как ПК только что сделал что-то, а вы, вероятно, тайно ненавидите это.

Я сделал это просто для удовольствия, но в итоге я потратил на Hackintosh больше, чем если бы я только купил Mac Mini. Конечно, мой компьютер в 4 раза быстрее, но это не то же самое, что настоящий Mac. На Mac все просто работает ... это действительно приятно. Но на моем Хакинтоше ничто не работает без непосредственного вмешательства с моей стороны ... не очень приятно.

Я всегда планировал использовать этот компьютер для разработки окон, так что это не было тратой, но в противном случае это была бы ОГРОМНАЯ трата.

Я сделал это просто для удовольствия, но в итоге я потратил на Hackintosh больше, чем если бы я купил Mac Mini. Конечно, мой компьютер в 4 раза быстрее, но это не то же самое, что настоящий Mac. На Mac все просто работает ... это действительно приятно. Но на моем Хакинтоше ничто не работает без непосредственного вмешательства с моей стороны ... не очень приятно.

Я всегда планировал использовать этот компьютер для разработки окон, так что это не было тратой, но в противном случае это была бы ОГРОМНАЯ трата.

Я сделал это просто для удовольствия, но в итоге я потратил на Hackintosh больше, чем если бы я купил Mac Mini. Конечно, мой компьютер в 4 раза быстрее, но это не то же самое, что настоящий Mac. На Mac все просто работает ... это действительно приятно. Но на моем Хакинтоше ничто не работает без непосредственного вмешательства с моей стороны ... не очень приятно.

Я всегда планировал использовать этот компьютер для разработки окон, так что это не было тратой, но в противном случае это была бы ОГРОМНАЯ трата.

Если вам нужен доступ к переменной в другом классе (в другом пространстве имен), ваш другой класс должен каким-то образом предоставить эту переменную. Обычной практикой для этого является использование открытого свойства (статического, если вам нужен только доступ к этой переменной) для переменной.

namespace My.Namespace
{
    public class MyClassA
    {
        public void MyMethod()
        {
            // Use value from MyOtherClass
            int myValue = My.Other.Namespace.MyOtherClass.MyInt;
        }
    }
}

namespace My.Other.Namespace
{
    public class MyOtherClass
    {
        private static int myInt;
        public static int MyInt
        {
            get {return myInt;}
            set {myInt = value;}
        }

        // Can also do this in C#3.0
        public static int MyOtherInt {get;set;}
    }
}
11
ответ дан 6 December 2019 в 14:09
поделиться

Чтобы добавить ответ Энди, вы также можете сократить вызов свойства MyInt, добавив его над объявлением My.Namespace :

using My.Other.Namespace

Если вы сделаете это, то ваш вызов свойства MyInt будет выглядеть следующим образом:

int MyValue = MyOtherClass.MyInt
4
ответ дан 6 December 2019 в 14:09
поделиться

Как узел стороны, это может быть сделано путем добавления ссылки на блок, в котором public используются участники другого блока. Это - то, что подверглось мне.

0
ответ дан 6 December 2019 в 14:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: