Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Можно ли предотвратить коллецию от изменений с помощью IReadOnlyCollection? / 25 сообщений из 43, страница 1 из 2
25.09.2013, 13:29
    #38407143
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли предотвратить коллецию от изменений с помощью IReadOnlyCollection?
Т. е. не с помощью конкретной реализации IReadOnlyCollection (например, ReadOnlyCollection), а именно только с интерфейсом?

Вот пример кода (что-то из ASP.NET MVC).

Здесь я создаю какую-то модель и хочу сделать её коллецию Submodels неизменяемой (immutable). Поэтому я использую IReadOnlyCollection. При этом я хочу получить отложенное выполнение, поэтому возвращаю из линка интерфейсный тип. Но поскольку нельзя вернуть из линка тип IReadOnlyCollection, то возвращаю один из типов, от которого он наследуется. При этом подразумевается, что настоящий запрос к БД будет, когда кто-нибудь начнёт проходить каким-нибудь foreach'ем по коллекции Submodels. Так нормально я сделал? А как бы сделали вы? Ещё раз требования: неизменяемая коллеция и отложенное выполнение.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
public class Model
{
    public IReadOnlyCollection<Submodel> Submodels { get; private set; }

    public Model()
    {
        // Use Entity Framework.
        using (DatabaseContext ndb = new DatabaseContext())
        {
            this.Submodels = (from o in ndb.MyEntities
                              where ...
                              orderby ...
                              select new Submodel(...)).AsEnumerable();
        }
    }
}
...
Рейтинг: 0 / 0
25.09.2013, 13:33
    #38407148
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли предотвратить коллецию от изменений с помощью IReadOnlyCollection?
Я вот почему спрашиваю. Я тут начитался про всякое защитное программирование, и вот эту статью в частности. Испугался, и решил, что если сделаю что-то вроде того, что выше написал, то у человека по ссылке отпадёт желание использовать функции типа Censure (там поиском по странице легко найти) таким образом, как он использовал. У него, как я понимаю, при попытке изменить такую коллецию, либо эксепшен вылетит, либо ещё что-то, но она не изменится.

Но я вот не уверен, что это сработает без коркретной реализации. Достаточно ли только интерфейса?
...
Рейтинг: 0 / 0
25.09.2013, 13:34
    #38407153
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли предотвратить коллецию от изменений с помощью IReadOnlyCollection?
Ты иногда сам читаешь свои глупости?

user7320Можно ли предотвратить коллецию от изменений

user7320Т. е. не с помощью конкретной реализации IReadOnlyCollection (например, ReadOnlyCollection), а именно только с интерфейсом?

"Предотвратить" - глагол, что сделать. Это реализация.
...
Рейтинг: 0 / 0
25.09.2013, 13:40
    #38407166
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли предотвратить коллецию от изменений с помощью IReadOnlyCollection?
МСУТы иногда сам читаешь свои глупости?

user7320Можно ли предотвратить коллецию от изменений

user7320Т. е. не с помощью конкретной реализации IReadOnlyCollection (например, ReadOnlyCollection), а именно только с интерфейсом?

"Предотвратить" - глагол, что сделать. Это реализация.
Не понял.

Я хочу, чтобы не изменяли мою коллецию. Но и одновременно хочу, чтобы было отложенное выполнение. Если я напишу такое

Код: c#
1.
2.
3.
4.
5.
this.Submodels = new ReadOnlyCollection(
	from o in ndb.MyEntities
	where ...
	orderby ...
	select new Submodel(...)).ToList();



то не будет отложенного выполнения. А если оставлю, как есть (т. е. не использую конкретную реализацию интерфейса IReadOnlyCollection), то я не знаю, будет ли моя коллеция ридонли. Ведь нельзя же создать экзепляр интерфейса.
...
Рейтинг: 0 / 0
25.09.2013, 13:44
    #38407175
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли предотвратить коллецию от изменений с помощью IReadOnlyCollection?
Там ещё перед from и после ToLost() по скобке забыл.
...
Рейтинг: 0 / 0
25.09.2013, 14:14
    #38407223
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли предотвратить коллецию от изменений с помощью IReadOnlyCollection?
user7320Я хочу, чтобы не изменяли мою коллецию.
ReadOnlyCollection, List<T>.AsReadOnly

user7320Но и одновременно хочу, чтобы было отложенное выполнение.
Lazy<T>, lazy load property
...
Рейтинг: 0 / 0
25.09.2013, 14:20
    #38407236
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли предотвратить коллецию от изменений с помощью IReadOnlyCollection?
Начал читать про Lazy в МСДН. Понял, что мне это не надо, достаточно ReadOnlyCollection. ))
...
Рейтинг: 0 / 0
25.09.2013, 14:24
    #38407244
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли предотвратить коллецию от изменений с помощью IReadOnlyCollection?
user7320Начал читать про Lazy в МСДН. Понял, что мне это не надо, достаточно ReadOnlyCollection. ))
это как имхо lazy и ReadOnlyCollection соотносятся между собой как колбаса и композитор марк фрадкин
...
Рейтинг: 0 / 0
25.09.2013, 15:02
    #38407326
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли предотвратить коллецию от изменений с помощью IReadOnlyCollection?
user7320, не забивай свою голову всякими глупостями. Вот тебе решение твоей задачи в целом . Не нужны тебе никакие readonly коллекции.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public class Repository
{
    private IDatabaseContext Context { get; private set; }

    public Repository(IDatabaseContext context)
    {
        Context = context;
    }

    public IEnumerable<Submodel> GetSubmodels()
    {
        return Context.
    }
}



А модель ничего не должна знать о IDatabaseContext, а о DatabaseContext и подавно.
...
Рейтинг: 0 / 0
25.09.2013, 15:07
    #38407336
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли предотвратить коллецию от изменений с помощью IReadOnlyCollection?
МСУuser7320, не забивай свою голову всякими глупостями. Вот тебе решение твоей задачи в целом . Не нужны тебе никакие readonly коллекции.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public class Repository
{
    private IDatabaseContext Context { get; private set; }

    public Repository(IDatabaseContext context)
    {
        Context = context;
    }

    public IEnumerable<Submodel> GetSubmodels()
    {
        return Context.
    }
}



А модель ничего не должна знать о IDatabaseContext, а о DatabaseContext и подавно.

Даже и не знаю, давать тебе ссылку, или нет...
...
Рейтинг: 0 / 0
25.09.2013, 15:19
    #38407358
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли предотвратить коллецию от изменений с помощью IReadOnlyCollection?
user7320Т. е. не с помощью конкретной реализации IReadOnlyCollection (например, ReadOnlyCollection), а именно только с интерфейсом?

Вот пример кода (что-то из ASP.NET MVC).

Здесь я создаю какую-то модель и хочу сделать её коллецию Submodels неизменяемой (immutable). Поэтому я использую IReadOnlyCollection. При этом я хочу получить отложенное выполнение , поэтому возвращаю из линка интерфейсный тип. Но поскольку нельзя вернуть из линка тип IReadOnlyCollection, то возвращаю один из типов, от которого он наследуется. При этом подразумевается, что настоящий запрос к БД будет, когда кто-нибудь начнёт проходить каким-нибудь foreach'ем по коллекции Submodels. Так нормально я сделал? А как бы сделали вы? Ещё раз требования: неизменяемая коллеция и отложенное выполнение.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
public class Model
{
    public IReadOnlyCollection<Submodel> Submodels { get; private set; }

    public Model()
    {
        // Use Entity Framework.
        using (DatabaseContext ndb = new DatabaseContext())
        {
            this.Submodels = (from o in ndb.MyEntities
                              where ...
                              orderby ...
                              select new Submodel(...)).AsEnumerable();
        }
    }
}

То есть ты хочешь, чтобы запрос к БД реально выполнялся, когда контекст уже disposed? Боюсь, что исключение поймаешь (хотя с EF я не работал, утверждать не буду).
...
Рейтинг: 0 / 0
25.09.2013, 15:22
    #38407364
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли предотвратить коллецию от изменений с помощью IReadOnlyCollection?
skyANAДаже и не знаю, давать тебе ссылку, или нет...
Ты о чем?
...
Рейтинг: 0 / 0
25.09.2013, 15:33
    #38407393
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли предотвратить коллецию от изменений с помощью IReadOnlyCollection?
МСУ, об этом: 14878644 .
...
Рейтинг: 0 / 0
25.09.2013, 15:34
    #38407400
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли предотвратить коллецию от изменений с помощью IReadOnlyCollection?
skyANAМСУ, об этом: 14878644 .
У человека такая каша в голове, что даже не хочется влезать в это дело :)
...
Рейтинг: 0 / 0
26.09.2013, 13:11
    #38408321
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли предотвратить коллецию от изменений с помощью IReadOnlyCollection?
МСУuser7320, не забивай свою голову всякими глупостями. Вот тебе решение твоей задачи в целом . Не нужны тебе никакие readonly коллекции.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public class Repository
{
    private IDatabaseContext Context { get; private set; }

    public Repository(IDatabaseContext context)
    {
        Context = context;
    }

    public IEnumerable<Submodel> GetSubmodels()
    {
        return Context.
    }
}



А модель ничего не должна знать о IDatabaseContext, а о DatabaseContext и подавно.
У меня не будет репозитория. Пока не будет. У меня времени нет его по-нормальному делать. А потом посмотрим. Захотят репозиторий - я время дополнительное попрошу.

И главное, модели предметной области толком-то и нет. Приложение - тупо справочник. Сущности со связями. Всё. Ни расчётов, ни отчётов, ничего. Вся модель - БД в СУБД. Так что модель в ASP.NET MVC и заполнять-то нечем. Надо тупо создать справочник-сайт. Веб 1.0. Запросы к БД и всё. Поэтому модели у меня - это модели представлений на самом деле, если говорить в терминоГолии WPF... Дайте побыдлокодить, в конце-то концов! ))
...
Рейтинг: 0 / 0
26.09.2013, 13:13
    #38408328
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли предотвратить коллецию от изменений с помощью IReadOnlyCollection?
skyANAuser7320Т. е. не с помощью конкретной реализации IReadOnlyCollection (например, ReadOnlyCollection), а именно только с интерфейсом?

Вот пример кода (что-то из ASP.NET MVC).

Здесь я создаю какую-то модель и хочу сделать её коллецию Submodels неизменяемой (immutable). Поэтому я использую IReadOnlyCollection. При этом я хочу получить отложенное выполнение , поэтому возвращаю из линка интерфейсный тип. Но поскольку нельзя вернуть из линка тип IReadOnlyCollection, то возвращаю один из типов, от которого он наследуется. При этом подразумевается, что настоящий запрос к БД будет, когда кто-нибудь начнёт проходить каким-нибудь foreach'ем по коллекции Submodels. Так нормально я сделал? А как бы сделали вы? Ещё раз требования: неизменяемая коллеция и отложенное выполнение.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
public class Model
{
    public IReadOnlyCollection<Submodel> Submodels { get; private set; }

    public Model()
    {
        // Use Entity Framework.
        using (DatabaseContext ndb = new DatabaseContext())
        {
            this.Submodels = (from o in ndb.MyEntities
                              where ...
                              orderby ...
                              select new Submodel(...)).AsEnumerable();
        }
    }
}

То есть ты хочешь, чтобы запрос к БД реально выполнялся, когда контекст уже disposed? Боюсь, что исключение поймаешь (хотя с EF я не работал, утверждать не буду).
Очень правильное замечание! Поэтому я уже отказался от этого в пользу создания экземпляра ReadOnlyCollection.
...
Рейтинг: 0 / 0
26.09.2013, 13:19
    #38408339
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли предотвратить коллецию от изменений с помощью IReadOnlyCollection?
user7320И главное, модели предметной области толком-то и нет. Приложение - тупо справочник.Справочник чего? Сферической фигни в вакууме? А данные в этот сферический справочник откуда попадают? А сколько этих данных?
А зачем они вообще нужны эти данные, если они сферические?

Вот ты сейчас набыдлокодишь, а людям будет неудобно пользоваться.
...
Рейтинг: 0 / 0
26.09.2013, 13:20
    #38408343
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли предотвратить коллецию от изменений с помощью IReadOnlyCollection?
user7320Дайте побыдлокодить, в конце-то концов! ))
Тогда вообще ничего не пиши, возьми EF и обращайся к БД прямо в контроллере.
...
Рейтинг: 0 / 0
26.09.2013, 13:37
    #38408385
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли предотвратить коллецию от изменений с помощью IReadOnlyCollection?
МСУskyANAМСУ, об этом: 14878644 .
У человека такая каша в голове, что даже не хочется влезать в это дело :)
Мне уже значительно лучше! Я уже продвинулся и вот тут следующий вопрос у меня возник.

МСУuser7320Дайте побыдлокодить, в конце-то концов! ))
Тогда вообще ничего не пиши, возьми EF и обращайся к БД прямо в контроллере.
Это я уже давно умею делать - скучно. Теперь вот модели делаю. Репозиторий я делал в приложении для WPF - нудная работа, а толку я от неё так и не увидел. Вы там у себя крутые штуки делаете, с версиями и поддержкой и развитием годами, поэтому вам и кажется, что если в модель репозиторий поместить (ну в смысле, что без репозитория всё делать), то будет ад и погибель. А я так сразу не могу по всм правилам всё делать и все паттерны соблюсти - у меня уже каша в голове.
...
Рейтинг: 0 / 0
26.09.2013, 13:43
    #38408395
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли предотвратить коллецию от изменений с помощью IReadOnlyCollection?
skyANA,
да люди поймут и простят ))
...
Рейтинг: 0 / 0
26.09.2013, 13:43
    #38408397
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли предотвратить коллецию от изменений с помощью IReadOnlyCollection?
user7320Репозиторий я делал в приложении для WPF - нудная работа, а толку я от неё так и не увидел.Через это приложение заполняется справочник?
...
Рейтинг: 0 / 0
26.09.2013, 13:44
    #38408399
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли предотвратить коллецию от изменений с помощью IReadOnlyCollection?
skyANAuser7320Репозиторий я делал в приложении для WPF - нудная работа, а толку я от неё так и не увидел.Через это приложение заполняется справочник?
Тогда я бы взял этот репозиторий и использовал его тут.
...
Рейтинг: 0 / 0
26.09.2013, 13:49
    #38408409
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли предотвратить коллецию от изменений с помощью IReadOnlyCollection?
user7320skyANAпропущено...
Через это приложение заполняется справочник?
Тогда я бы взял этот репозиторий и использовал его тут.Заполнение справочника вообще не на .Net написано?
...
Рейтинг: 0 / 0
26.09.2013, 13:53
    #38408418
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли предотвратить коллецию от изменений с помощью IReadOnlyCollection?
skyANAuser7320пропущено...

Тогда я бы взял этот репозиторий и использовал его тут.Заполнение справочника вообще не на .Net написано?
Мы на него Лайтсвич натравили - вроде, чего-то неплохое он выдал. Там человек его попробует до ума довести. Если не получится, буду писать свой редактор с репозиторием и тогда уже использовать его в нынешнем своём приложении.

А для тестов я руками в таблички данные повбивал в Management Studio.

Лучше помогите, пожалуйста, с этим вопросом . Я так быстрее к репозиторию приду.
...
Рейтинг: 0 / 0
26.09.2013, 14:01
    #38408441
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли предотвратить коллецию от изменений с помощью IReadOnlyCollection?
user7320skyANAпропущено...
Заполнение справочника вообще не на .Net написано?
Мы на него Лайтсвич натравили - вроде, чего-то неплохое он выдал. Там человек его попробует до ума довести. Если не получится, буду писать свой редактор с репозиторием и тогда уже использовать его в нынешнем своём приложении.

А для тестов я руками в таблички данные повбивал в Management Studio.

Лучше помогите, пожалуйста, с этим вопросом . Я так быстрее к репозиторию приду.То есть вы собрались развивать и поддерживать две различных программы, написанные на .Net, не обладающие общим кодом, но работающие с одной БД.

Вы не ищете лёгких путей.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Можно ли предотвратить коллецию от изменений с помощью IReadOnlyCollection? / 25 сообщений из 43, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]