Чтобы ответить только на вопрос об избыточности, не комментируя всю философию «контекст для объекта» или код Рика, который я не рассматривал,
Вы можете удалить две строки с помощью
var customer = new Customer().GetCustomer(primaryKeyId);
Либо создайте фабрику, которая будет действовать как статический шлюз:
public static class CustomerFactory
{
public static Customer BuildCustomerWithId(_<int/short/long>_ primaryKeyId)
{
var customer = new Customer();
return customer.GetCustomer(primaryKeyId);
}
}
Это не только очищает создание вашего объекта (теперь вы просто вызываете var customer = CustomerFactory.BuildCustomerWithId(1);
), но теперь вы можете при необходимости изменить метод BuildCustomerWithId()
, не изменяя классы потребления. Например, позже вы можете решить, что вам не нравится создание экземпляра DataContext в бизнес-объектах, и вы реорганизуете все это. Вместо этого вы можете создать экземпляр DataContext на фабрике, и вам не нужно менять код, вызывающий BuildCustomerWithId()
. Статический шлюз делает модульное тестирование немного более сложным, но все же намного проще, чем непосредственное создание экземпляров Customer
объектов.
Я понимаю, что это не решает проблему сначала создания экземпляра, а затем вызова метода getter, но, честно говоря, я не вижу в этом проблемы с точки зрения производительности - только с точки зрения синтаксиса / читабельности. 1015 *