Каков наилучший подход для собственности только для чтения - PullRequest
1 голос
/ 12 марта 2010

Я использую модель UserRepository-> User

Хранилище используется для сохранения и загрузки пользователя.

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

Пользователь и репозиторий находятся в основном проекте, а пользовательский интерфейс - в Интернете.

Есть ли способ сделать это, например, модификатор свойства, или я должен поместить идентификатор в конструктор пользователя?

Спасибо

Ответы [ 2 ]

8 голосов
/ 12 марта 2010

Вы можете использовать свойство без установщика и закрытой переменной, например:

private int _id; //Set locally
public int ID
{
  get { return _id; }
}
//in the class _id = 5;

Или используйте автоматические свойства с частным сеттером, например так:

public int ID { get; private set; }
//in the class ID = 5; this won't work outside the class

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

0 голосов
/ 13 марта 2010

Я использовал этот шаблон (не знаком с C # как таковым, но идея должна работать):

class Foo
{
    protected int id;

    public int GetID()
    {
        return (ID);
    }
}

class MutableFoo : Foo
{
    public void SetID(int val)
    {
        id = val;
    }
}

тогда пользовательский интерфейс имеет дело только с классом "Foo", который доступен только для чтения, в то время как другие части могут иметь дело с "MutableFoo", который предназначен для чтения / записи. Вы должны иметь возможность только когда-либо создавать экземпляры "MutableFoo" и затем передавать их другим частям кода, который получает затем как "Foo", этот код пользовательского интерфейса будет иметь доступ только для чтения к объектам, в то время как другие части могут читать -записать доступ.

Возможно, я бы тоже сделал абстрактным "Foo" (я не могу вспомнить случай, когда я этого не сделал).

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