Сопоставить свойства объекта домена с закладками Word - PullRequest
0 голосов
/ 03 августа 2011

Нам нужно напечатать документы Word, в которых есть закладки. У нас также есть доменные объекты, свойства которых отображаются на одну (или несколько) закладок в документах Word. Прямо сейчас, чтобы проверить, у нас есть оператор switch (foo является сущностью домена):

    private static string GetValueForBookmark(Bookmark bookmark, Foo foo)
    {
        // ToDo: Un-switch this.

        switch (bookmark.Name)
        {
            case "dist":
                return foo.Measurment.Distance;
            case "serialNo":
                return foo.SerialNumber;
            default:
                return string.Empty;
        }
    }

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

Одна из идей заключается в создании сопоставления имен закладок со свойствами сущностей домена. Возможно, создайте перечисление, которое представляет имена закладок, затем добавьте атрибуты к этим элементам перечисления, которые представляют свойства сущности домена. Атрибуты должны будут указывать эти свойства, и я не знаю, можно ли это сделать. Можно ли здесь использовать деревья выражений?

Есть ли другой вариант? Я просто хочу отобразить свойства объекта домена на строковые литералы.

Каков наилучший способ решить эту проблему?

1 Ответ

0 голосов
/ 03 августа 2011

Я просто пошел с этим:

    private static void MapBookmarksToFooProperties()
    {
        if (_bookmarkToFooPropertyMapping != null) { return; }  // We already created the mapping.

        _bookmarkToFooPropertyMapping = new Dictionary<string, Func<Foo, string>>();

        // Associate Word document bookmarks to their properties within a Foo object.

        _bookmarkToFooPropertyMapping.Add("dist", foo => foo.Measurment.Distance);
        _bookmarkToFooPropertyMapping.Add("serialNo", foo => foo.SerialNumber);
        // More mapping here
    }     

Тогда, получить к нему доступ так же просто, как это:

return _bookmarkToFooPropertyMapping[bookmark.Name](foo);
...