Я обычно называю классами в Бизнес-проекте как Manager.cs, как BaseManager.cs, CommentsManager.cs, ProfileManager.cs, и т.д...
Как Вы называете свои классы в проекте DataAccess? Вы называете это CommentsDA, CommentsDB, или что?
Просто любопытный... BTW, я использую.NET C#.
Раньше я разделял соглашения о наименовании классов для каждого типа программного слоя, о котором вы спрашиваете. Однако в мире .NET после осознания того, что каждый уровень является собственной сборкой, а сборки часто заменяются сборками, реализующими одинаковые интерфейсы/с, я нашел пространство имен наиболее важным/эффективным изменением, и отказался от префиксов и суффиксов, специфичных для конкретного класса, по большей части.
Например, у меня был Customer
(business) и CustomerDAL
(уровень доступа к данным)
... и это часто меняло в моих последних проектах соответственно . ...
Com.Example.ProjectName.Business.Customer
и Com.Example.ProjectName.Data.Customer
с интерфейсом ICustomer
, который используется между ними вместо прямого доступа к какому-либо конкретному классу в целевом проекте.
Обычно, реализуя суффикс или префикс класса , вы пытаетесь предотвратить конфликты именования между узкосвязанными сборками .
Однако обычно рекомендуется иметь плотно соединенные сборки посредством интерфейсов ; побочным эффектом является то, что Вы больше не используете конкретное имя класса напрямую. В противном случае, используя плотно соединенные сборки, вы можете комбинировать их в одну, так как они напрямую полагаются друг на друга, и польза от отдельных сборок уменьшается.
Иногда мое программное обеспечение использует более описательный подход, как Customer и CustomerData классы, и я понимаю, что это использование суффикса, но цель заключается в естественном потоке, а не в предотвращении конфликтов именования, так как мой интерфейс сидит между ними независимо друг от друга.
В двух словах, низкая когезия ставит под сомнение вопрос, какие классы должны/могут/могут быть названы в любом слое проекта относительно друг друга. А так как у вас уже есть отдельные сборки для бизнес-ответственности и ответственности за данные, вы должны неявно хотеть, чтобы низкая когезия присутствовала. Так что мой ответ в контексте разработки приложений - ни один суффикс или префикс класса объективно не лучше в соответствии с концепцией вопроса.
Для полезного примера кода я включаю следующий скелет C#, чтобы показать политику именования классов, к которой я тяготею (или отсутствие политики может быть более точным).
Примечание: Этот пример в некотором роде неполный, но показывает концепцию, как именование классов не имеет значения между сборками (даже если это одно и то же имя класса), так как они разделены с помощью интерфейсов.
Business. dll - Сборка бизнес уровня
Ссылочная сборка Shared.dll.
namespace Com.Examle.MyProject.Business {
using Com.Example.MyProject.Shared; // for ICustomer
class Customer {
// Reference obtained to an ICustomer implementation (not shown).
// Composition of the data customer, just for illustration purposes
ICustomer _cust;
// From business, a data access usage example:
public void GetData() {
_cust.SaveToDataSource();
}
}
}
Бизнес использует ICustomer вместо жесткого подключения к сборке Data.dll.
Shared.dll - Сборка Shared.dll - Общие типы ссылаются как на бизнес-сборки, так и на сборки данных.
// This is the only required link between business and data assemblies.
// Business is shielded from Data concrete class names and vice-versa.
namespace Com.Example.MyProject.Shared {
public interface ICustomer {
void SaveToDataSource();
}
}
Data. dll - Уровень доступа к данным
Ссылка на общую сборку.
namespace Com.Example.MyProject.Data {
using Com.Example.MyProject.Shared; // for ICustomer
class Customer : ICustomer { // implement ICustomer - other assemblies can too
public void SaveToDataSource() {
// logic to save data to the data source
}
}
}