Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 17.08.2024
Сообщений: 13

Архитектура приложения и ООП

03.09.2024, 09:53. Показов 1550. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!

У меня есть вопрос по разработке архитектуры приложения.
Есть классы-модели World, Person, Organization.

World - это класс, хранящий в себе списки Person и Organization.
Также в World хранится информация о SQLiteConnection, что дает мне возможность из этого класса запускать запросы в базу данных.

Person и Organization вытаскиваются из базы данных SQLite. В отличие от World в этих классах нет SQLiteConnection, что не дает мне возможности из них запускать запросы в базу данных.

Все хорошо, что иногда есть потребность прямо из класса Organization получить данные поле Person manager, имея только его идентификатор int managerID.

Без коннектора в базу данных это сделать невозможно.
Ну или, например, хочется в классе Person добавить метод saveToDatabase, чтобы все изменения его полей можно было сохранить в базу. Опять же без коннектора это не сделать.

Может есть какой-то способ прокинуть этот коннектор в Person и Organization без использования конструктора?
Просто экземпляры этих классов создает SQLiteConnection и он явно не передает туда сведения о себе самом.

Ниже код, написал в онлайн редакторе, так как я не дома и нет у меня доступа к компилятору, но принцип должен быть понятен.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
namespace HelloWorld
{
 
    class Person {
        
        public int ID { get; set; }
        public string firstName { get; set; }
        public string lastName { get; set; }
        
    }
    
    class Organization {
        public int ID { get; set; } // Это приходит с БД
        public string displayName; // Это приходит с БД
        public int managerID; // Это приходит с БД
        public Person manager; // Это должно генерироваться по managerID отдельным запросом в БД.
        
        public Person Manager {
            get {
                // this.manager = Здесь должна быть логика получения информации из БД, но нет dbConnector, чтобы сделать запрос;
                return this.manager;
            }
        }
        
    }
    
    class World {
        
        //public SQLiteConnection dbConnection = null;
        public List<Person> people = new List<Person>();
        public List<Organization> organizations = new List<Organization>();
        
        public World(string connectionString) {
            // подключение по connectionString и сохранение коннектора в this.dbConnection
        }
        
        public List<Person> GetPeople() {
            // this.people = // [сложная логика получения данных запросом из БД].toList<Person>();
            return this.people;
        }
        
        public List<Organization> GetOrganizations() {
        //  this.organizations = // [сложная логика получения данных запросом из БД].toList<Organization>();
            return this.organizations;
        }
        
    }
 
  class Program
  {
    static void Main(string[] args)
    {
      Console.WriteLine("Hello World!");    
    }
  }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.09.2024, 09:53
Ответы с готовыми решениями:

Правильная ООП архитектура
Есть классы-Дома, наследуемые от базового класса, как показано ниже в коде. Я хочу сделать кнопки в ГУИ. При нажатии на кнопку строиться...

Архитектура приложения
Существует литература по построению архитектуры приложений?

Архитектура приложения
Всем привет! Пытаюсь разобраться в следующих вопросах. есть приложение C# ( но это не важно ) которое взаимодействует с база данных...

21
2296 / 1612 / 400
Регистрация: 26.06.2017
Сообщений: 4,774
Записей в блоге: 1
05.09.2024, 09:09
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Elfix Посмотреть сообщение
Ну мне не кажется, что репозитории нужно создавать чтобы под каждый его метод открывать соединение и закрывать его после осуществления запроса.
Зря так думаете. По идее репозиторий живёт долго (по сути от момента первого использования и до конца жизни сервиса/приложения) и очень плохая идея всё это время держать соединение открытым.
Цитата Сообщение от Elfix Посмотреть сообщение
сможете оценить правильно ли я понял идею и правильно ли ее реализовал?
В целом репозиторий выглядит близко к нормальному кроме постоянно открытого соединения. Ну и методов в нём маловато, вы же смотрели ссылку про репозитории, а там есть interface IRepository<T>, вот его и следовало реализовать.
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
05.09.2024, 21:17
Цитата Сообщение от Elfix Посмотреть сообщение
Что не так?
Метод private void MainForm_Load - это Code Behind Формы, то есть тоже часть View (Форма - это тоже контрорл).
При правильной реализации Формы (View) и Модель (а репозиторий это часть Модели) располагаются в сборках у которых даже ссылок нет друг на друга.

Но это замечание в виду названия вашего топика Архитектура приложения и ООП.
ООП это не только создание и использование объектов, но и соблюдение ООП паттернов.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.09.2024, 21:17

Архитектура приложения с БД на интранете
Хочу создать следующую систему, но не могу понять, какие, где технологии мне использовать. Буду благодарен за любую помощь. Есть база...

Архитектура приложения, даункаст
Предположим, я хочу создать класс &quot;ящик с инструментами&quot;. В ящике могут лежать различные инструменты: ключи, молотки, пилы и т. д. Каждый...

Наследование и микросервисная архитектура приложения
Добрый день. Допустим есть сущность персоны описанная классом class Person { string Name { get; set; } string Surname { get;...

При создании статического класса нарушалась вся архитектура приложения
Здравствуйте. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; ...

Архитектура консольного приложения по типу паттернов MVVM, MVC, MVP
Добрый день! Есть всякие паттерны MVVM, MVC, MVP но они не предназначены для консольного приложения, помогите справиться с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru