2013-02-28 4 views
1

Я не знаю, возможно ли это в любом случае, но то, что я пытаюсь получить, - заставить разработчиков, которые наследуют от какого-то базового класса, реализовать конкретный параметр в каждом методе этого класса.Добавить необязательный параметр для каждого метода класса, который наследуется от базового класса C#

Что-то вроде:

class SomeClass : BaseClass 
{ 
    public void SomeMethod(bool iAmAForcedParameter = false) 
    { 

    } 
} 

Причина этого заключается в том, что у нас есть услуги, которые могут быть вызваны из проекта MVC (который наш интерфейс) или могут потребляться от других услуг. Если служба будет вызвана из внешнего интерфейса, она должна записать изменения в базу данных после того, как все будет сделано. Если служба используется из другой службы, она должна делать изменения (в памяти) и НЕ записывать их в базу данных.

Еще одна идея, с которой я столкнулся, состоит в том, чтобы определить, кто является вызывающим, и если он принадлежит к определенному типу, метод не должен отправлять данные. Как бы то ни было, я не знаю, как это сделать или если это возможно даже без огромных воздействий на производительность.

Поздравления и благодарности за вашу помощь заранее.

+0

Я не понимаю, что: «Причина этого заключается в том, что вызывающий этот метод должен определить, если изменение метода делает должен быть отправлен на SQLServer или нет (подождите больше изменений). " Попробуйте перефразировать его. –

+0

может ли клиент изменить этот параметр? – happygilmore

+1

Почему вы не можете использовать интерфейсы? – Alex

ответ

1

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

class SomeInMemoryClass : BaseClass 
{ 
    public override void SomeMethod() {} 
} 

class SomeSqlClass : BaseClass 
{ 
    public override void SomeMethod() {} 
} 

Во всяком случае - передача булево методу является дизайн запах. Это говорит о том, что ваш метод делает две вещи. Лучше иметь два метода, которые говорят звонящему, что они делают:

void SomeInMemoryMethod() 
void SomeSqlMethod() 

Вам не кажется, что это более ремонтопригодны, чем

void SomeMethod(false) 

Для последнего редактирования: Pass SomeInMemoryClass объект, который не должен сохранять данные в базе данных. Другие типы должны использовать SomeSqlClass экземпляров.

+1

Это может быть решение. Все еще нужно проверить принятие этой идеи с моими коллегами, но уже спасибо. Наша единственная проблема заключается в том, что тогда у нас будет около 20-30 методов вместо 10-15 только для одной разницы, что одним способом мы будем называть фиксацию в конце. –

+0

@KevinBoss имеют 20-30 методов, они просто скрываются внутри 10-15 методов, потому что каждый из методов делает две вещи :) –

+1

Я должен согласиться с этим. Может быть, мы просто леним, чтобы написать дополнительный код;) –

1

Внедрение определенного параметра во всех методах этого класса.

Я думаю, что вы просто ищете свойство класса, которое вы можете проверить каждый метод.

0

Я также не понимаю вторую часть.

Для первого пункта, просто используйте

public void SomeMethod(bool iAmAForcedParameter) 

Так что без дополнительного аргумента.

В случае, если вы хотите иметь дополнительный аргумент в любом случае использовать

public void SomeMethod(bool iAmAForcedParameter) 
{ 
    SomeMethodX(iAmAForcedParameter) 
} 

public void SomeMethodX((bool iAmAForcedParameter = false) 
Смежные вопросы