Мне нужно создать три разных выпуска DLL, содержащих вызовы API нашего программного обеспечения. Я до сих пор понял, как это сделать, используя наследование. Может кто-то, пожалуйста, подтвердите, правильно ли я использую наследование (или если у вас есть предложение сделать это правильным/лучшим способом?) Я новичок в этом, так что все еще изучаю программирование на C#.Лучший подход для создания библиотек C# для разных выпусков программного обеспечения?
До сих пор у меня есть основной класс API_calls (которые являются общими для всех DLL изданий) следующим образом:
namespace APIcalls
{
public partial class API_Calls
{
public void Common_function1()
{
}
public void Common_function2()
{
}
}
}
Тогда у меня есть три .cs файлов класс с чем-то вроде следующей в каждом из них (Edition_A , Edition_B и Edition_C являются различными факторами для каждого издания DLL), любые дополнительные вызовы включены в API_Calls частичных классов следующим образом:
namespace dll_edition
{
public class Edition_A
{
public Edition_A()
{
// Code here for checking if current DLL is authorized
// Otherwise throw an exception
}
}
}
namespace APIcalls
{
public partial class API_Calls : Edition_A
{
public void Additional_Edition_A_function1()
{
}
public void Additional_Edition_A_function2()
{
}
}
}
в каждой сборке билде я включаю Edition_A файл, или Edition_B или Edition_C, а затем я создаю все три сборки, которые дают мне три библиотеки DLL.
Мой вопрос: Это правильный способ сделать это? Есть ли какие-то негативные отзывы о том, как я это сделал? Или есть лучший способ сделать это? Моя конечная цель - иметь три версии DLL с некоторыми общими вызовами API в них, а затем различные вызовы API, характерные для каждого типа DLL.
Благодарим за любой вклад, который у вас может быть!
-DD
Почему бы просто не использовать их все в одной DLL и разрешить доступ к определенным вызовам api, основываясь на том, какое издание они работают, вы будете поддерживать только одну базу кода. – Dispersia
Я сделал это, чтобы уменьшить размер DLL (в противном случае это было почти 12 МБ). Все более 400 API-вызовов все вместе, поэтому я не был уверен, есть ли лучший способ сделать это - есть ли лучший маршрут? У меня есть все файлы в одном и том же решении, разве это не поддерживает только одну базу кода? – EmbeddedDude
Что касается чистого кода, есть правило под названием FCoI: поддержка композиции над наследованием. Возможно, вы можете попытаться понять это и использовать его в этом сценарии. Наследование создает сильную связь, а это значит, что впоследствии ее будет сложно изменить. Композиция вместо этого позволяет вам составлять вещи различными способами. Он имеет свободную муфту и позволяет обмениваться вещами, например. если вы решите позже изменить свое лицензирование. –