Лучший код: расширить класс LINQ или создать отдельный вспомогательный класс? - PullRequest
2 голосов
/ 20 августа 2009

Я пытаюсь выяснить, что лучше / чище / более приемлемо для следующей проблемы. Мой класс "Клиент" генерируется через LINQ из базы данных. У клиента есть специальная ссылка активации, которая представляет собой URL-адрес, который необходимо сгенерировать из данных как экземпляра клиента, так и статических данных конфигурации.

Решение 1. Расширьте частичный класс Customer с помощью метода GenerateActivationUrl (), который будет извлекать данные из своего собственного экземпляра и вызывать статический класс, содержащий данные конфигурации, а затем отображать URL-адрес и возвращать его как строку.

Решение 2. Создайте статический вспомогательный класс LinkBuilder, который принимает Customer в качестве аргумента для метода GenerateActivationUrl (Customer customer), который затем будет получать необходимые данные из экземпляра customer, а также данные статической конфигурации и затем возвращать URL в виде строки.

Какое решение лучше и почему? Спасибо!

1 Ответ

2 голосов
/ 20 августа 2009

Что именно вы подразумеваете под «расширением»? наследование? методы расширения?

Лично я бы использовал частичный класс (в том же пространстве имен, но в другом файле для кода), чтобы представить его как свойство:

namespace MyDalNamespace {
    partial class Customer {
        public string ActivationUrl {get {/* some code */ }}
    }
}

Это напрямую связывает ActivationUrl как обычное свойство в экземпляре Customer.

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

Если у вас было для выполнения «варианта 2» (возможно, у вас нет доступа к DAL-библиотеке DAL), тогда подойдет метод расширения:

GenerateActivationUrl(this Customer customer) { ... } // note "this" 
...