Я пытаюсь следовать солидным принципам в моем новом проекте C# 12/.net 8.
Я начну с примера:
Учитывая две отдельные сборщики сборки и сборка, где Assemblya определяет интерфейс, который он нуждается в реализации для и Assemblyb, обеспечивает нехватку.// In AssemblyA
public interface IFoo{
public int SomeVariable { get; init; }
}
//In AssemblyB
public readonly struct Foo : IFoo
{
private readonly int _SomeVariable;
public int SomeVariable { get => _SomeVariable; init => _SomeVariable = value; }
}
//And then somewhere in AssemblyB is the function
public static IFoo GetFoo(){
return new Foo{SomeVariable = 1};
}
< /code>
Соответствующими принципами в этом примере являются «принцип сегрегации интерфейса» и «Принцип инверсии зависимости». С помощью DIP мы стремимся сделать Assemblya зависит от абстракции, чтобы оставить гибкость обеспечения конкреции для AssemblyB. Это делает так, что AssemblyB может решить, какой конкретный предоставление в каких обстоятельствах также помогает испытать. С помощью интернет -провайдера мы хотим, чтобы наши интерфейсы были столь же небольшими, насколько это необходимо, поэтому Assemblya не приходится иметь дело со всей сложностью Foo (при условии, что Foo намного более сложный, чем в примере).
Таким образом, пример выше, очевидно, будет работать, но приведет к боксу и, следовательно, снижает потенциальные выгоды от использования (Allocation Esliveance/Stack Allocation). Будьте использовать генерики с ограничениями типа: < /p>
public static TFoo GetFoo() where TFoo : struct, IFoo{
return new TFoo{SomeVariable = 1};
}
< /code>
, который, в свою очередь, заставляет сборку знать, если он хочет избежать бокса. Это не удовлетворяет падению, и если Foo более сложный ISP также не удовлетворен. даже невозможно удовлетворить? Если я не принимаю бокс, но тогда я мог бы использовать классы вместо этого. Что такое общее представление об этом? Есть ли что -то, что мне не хватает, что позволило бы погрузить и интернет -провайдеры с помощью структур, а не типы значений бокса? Я не нахожусь ни в месте, где мне абсолютно необходимо использовать структуры, и я не знаю, если использование struct действительно значительно выиграет в моем случае. Рассматривать этот вопрос как чистый концептуальный.
Подробнее здесь: https://stackoverflow.com/questions/776 ... s-but-to-d
Использование интерфейса, реализуемого структурой, чтобы не зависеть от конкреций, а для зависимости от абстракций (твер ⇐ C#
Место общения программистов C#
1756338665
Anonymous
Я пытаюсь следовать солидным принципам в моем новом проекте C# 12/.net 8.
Я начну с примера:
Учитывая две отдельные сборщики сборки и сборка, где Assemblya определяет интерфейс, который он нуждается в реализации для и Assemblyb, обеспечивает нехватку.// In AssemblyA
public interface IFoo{
public int SomeVariable { get; init; }
}
//In AssemblyB
public readonly struct Foo : IFoo
{
private readonly int _SomeVariable;
public int SomeVariable { get => _SomeVariable; init => _SomeVariable = value; }
}
//And then somewhere in AssemblyB is the function
public static IFoo GetFoo(){
return new Foo{SomeVariable = 1};
}
< /code>
Соответствующими принципами в этом примере являются «принцип сегрегации интерфейса» и «Принцип инверсии зависимости». С помощью DIP мы стремимся сделать Assemblya зависит от абстракции, чтобы оставить гибкость обеспечения конкреции для AssemblyB. Это делает так, что AssemblyB может решить, какой конкретный предоставление в каких обстоятельствах также помогает испытать. С помощью интернет -провайдера мы хотим, чтобы наши интерфейсы были столь же небольшими, насколько это необходимо, поэтому Assemblya не приходится иметь дело со всей сложностью Foo (при условии, что Foo намного более сложный, чем в примере).
Таким образом, пример выше, очевидно, будет работать, но приведет к боксу и, следовательно, снижает потенциальные выгоды от использования (Allocation Esliveance/Stack Allocation). Будьте использовать генерики с ограничениями типа: < /p>
public static TFoo GetFoo() where TFoo : struct, IFoo{
return new TFoo{SomeVariable = 1};
}
< /code>
, который, в свою очередь, заставляет сборку знать, если он хочет избежать бокса. Это не удовлетворяет падению, и если Foo более сложный ISP также не удовлетворен. даже невозможно удовлетворить? Если я не принимаю бокс, но тогда я мог бы использовать классы вместо этого. Что такое общее представление об этом? Есть ли что -то, что мне не хватает, что позволило бы погрузить и интернет -провайдеры с помощью структур, а не типы значений бокса? Я не нахожусь ни в месте, где мне абсолютно необходимо использовать структуры, и я не знаю, если использование struct действительно значительно выиграет в моем случае. Рассматривать этот вопрос как чистый концептуальный.
Подробнее здесь: [url]https://stackoverflow.com/questions/77639827/using-an-interface-implemented-by-a-struct-to-not-depend-on-concretions-but-to-d[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия