В моем приложении формы выигрыша у меня есть один класс службы, называемый DataServices
который предоставляет услуги доступа к базе данных для всех других классов клиентов (около 12 классов), когда дело касается операций CRUD
. (я использую ADO.net). У этого класса много общественных методов. Ниже приведена часть интерфейса, реализованного этим классом.
interface IDataService
{
BankAccount GetByACNo(string acNo);
bool InsertAccount(IBankAccount ba);
bool UpdateAccount(IBankAccount ba);
bool InsertClient(IClient newClient);
Client GetClientByCID(int CID);
Client GetClientByName(string clientName);
void UpdateClient(IClient changedClient);
DataTable LoadClientNamesAndCID();
DataTable LoadPointNamesAndPID();
bool InsertPoint(IPoint newPoint);
Point GetPointByPID(string id);
bool UpdatePoint(IPoint point);
Point GetPointByName(string id);
List<string> GetPIDs(string firstLetterOfPointName);
// other methods...
}
Поскольку эти методы не используют какие-либо переменные экземпляра, лучше ли все методы static
?
С MSDN http://msdn.microsoft.com/en-us/library/79b3xss3(v=vs.80).aspx
"Статические классы и члены класса используются для создания данных и функций, к которым можно получить доступ, не создавая экземпляр класса. Статические члены класса могут использоваться для разделения данных и поведения, не зависящих от любого идентификатора объекта: данные и функции не независимо от того, что происходит с объектом. Статические классы могут использоваться, когда в классе нет данных или поведения, которые зависят от идентичности объекта ".
Вопросов
1) Ну, это зависит от того, как вы действительно называете свои методы, вы можете использовать статические методы, если у вас нет причин создавать экземпляр класса. В этом подходе нет ничего плохого.
2) Не проблема, если статические методы установлены правильно. Каждый пользователь, статический или нет, будет иметь одинаковое влияние на базовый источник данных (XML, DB и т.д.),
Там разница в общем дизайне, хотя - статические методы должны почти всегда быть потокобезопасными (т.е. Вы должны сделать их потокобезопасными), в то время как методы экземпляров обычно не должны быть (хотя вы должны документировать свою безопасность потоков классов).
надеюсь это поможет