Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
73 / 73 / 28
Регистрация: 06.10.2013
Сообщений: 334

Нарушает ли кусок кода принцип Единства ответственности?

27.05.2016, 16:32. Показов 1629. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Подскажите, кто знает... Искал и читал объяснения принципов SOLID, но вот четкого ответа на свой вопрос не нашел пока что. А вопрос такой: Есть кусок кода:
C#
1
2
3
4
5
6
7
8
9
void УдалитьЗаписьToolStripMenuItemClick(object sender, EventArgs e)
        {           
            //MessageBox.Show(dataGridView1[4, dataGridView1.CurrentRow.Index].Value.ToString());
            string PacientFIO=dataGridView1.CurrentCell.Value.ToString();
            //string DataPriema=DateTime.Now.ToShortDateString();//+" "+DateTime.Now.ToLongTimeString();
            DelPacient(PacientFIO);         
            MessageBox.Show("Выбранный пациент удален успешно","Журнал приема пациентов",MessageBoxButtons.OK,MessageBoxIcon.Information);
            ShowJurnalToday();          
        }
Является ли вызов функции/процедуры внутри другой процедуры принцип Единства ответственности?

Смотрите...
Если изменится логика процедуры "DelPacient", то придется вносить изменения в описанную выше функцию. Тоже самое касается изменения логики процедуры ShowJurnalToday. А вообще описанная процедура необходима для удаления выбранного пациента, которая выполняется внутри процедуры DelPacient в которой описан доступ на уровне БД к записям.
Описанная процедура по коду делает следующее: удаляет запись, информирует пользователя и обновляет экран. Мне кажется, что очень много обязанностей?! Как считаете? Стоит ли мне убрать из описываемой процедуры информирование и обновление экрана?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.05.2016, 16:32
Ответы с готовыми решениями:

Калькулятор: Рефакторинг, принцип единой ответственности
Дали задание сделать калькулятор с помощью паттерна команда,сам калькулятор сделал,паттерн осуществил, но проблема в классах патттерна не...

Каждый день в течении апреля автомобилист нарушает или не нарушает правила дорожного движения...
Здравствуйте, помогите пожалуйста написать программу: Каждый день в течении апреля автомобилист нарушает или не нарушает правила...

Принцип кода при ступенчатой работе кода
В очередной раз прошу помощи. Есть три ступеньки. У каждой ступеньки свой набор инфы. Пример: Первая ступень. Выбираем из...

33
73 / 73 / 28
Регистрация: 06.10.2013
Сообщений: 334
27.05.2016, 17:31  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Cupko Посмотреть сообщение
что ваша форма DataTable и DataSet не инстанцирует
В классе по работе с БД они инстанцируются и уничтожаются потом. А в форме инстанцируется только DataTable...
принцип такой: создали, попользовались, удалили
0
Эксперт .NET
 Аватар для Usaga
14727 / 9497 / 1362
Регистрация: 21.01.2016
Сообщений: 35,818
27.05.2016, 17:33
Цитата Сообщение от Cupko Посмотреть сообщение
Зачем вам всё это добро вечно в памяти хранить?
Строки жёстко прописанные в коде тоже вечно в памяти хранятся, так что не велика разница. Перенос их в ресурсы облегчит локализацию и добавит чутка порядка.

Цитата Сообщение от JavaUser Посмотреть сообщение
Работа с БД происходит в отдельном классе, который не имеет доступа к контролам и окнам. Или не так надо?
Хорошо. Но работать с этим классом уже должно не представление, а контроллер (или аналогичная по функциональности сущность). Ознакомься с паттерном MVP. Может показаться, что это какая-то мутная и ненужная фигня, но, на самом деле, это очень важный шаг в сторону разделения обязанностей.
0
 Аватар для Cupko
658 / 595 / 171
Регистрация: 17.07.2012
Сообщений: 1,682
Записей в блоге: 1
27.05.2016, 17:40
Usaga, MVP на самом деле мутная и ненужная фигня, как и винформс
Но вы правы, польза от неё есть.
0
73 / 73 / 28
Регистрация: 06.10.2013
Сообщений: 334
27.05.2016, 17:42  [ТС]
Цитата Сообщение от Cupko Посмотреть сообщение
как и винформс
А что скажете о WPF и WCF? стоит ли переносить приложение под WPF с Winforms?
0
 Аватар для Cupko
658 / 595 / 171
Регистрация: 17.07.2012
Сообщений: 1,682
Записей в блоге: 1
27.05.2016, 17:43
Цитата Сообщение от JavaUser Посмотреть сообщение
А что скажете о WPF и WCF? стоит ли переносить приложение под WPF с Winforms?
Это больше юмор был, для всего есть свое применение, как и для WinForms - всё зависит от задачи. WCF тут немног не в тему.
0
73 / 73 / 28
Регистрация: 06.10.2013
Сообщений: 334
27.05.2016, 17:45  [ТС]
Цитата Сообщение от Cupko Посмотреть сообщение
WCF тут немног не в тему.
Можно же всю работу с БД перенести в сервис, который крутить в Console или как сервис в операционке и дергать его по мере необходимости... Или это изврат?
0
 Аватар для Cupko
658 / 595 / 171
Регистрация: 17.07.2012
Сообщений: 1,682
Записей в блоге: 1
27.05.2016, 17:47
Цитата Сообщение от JavaUser Посмотреть сообщение
Можно же всю работу с БД перенести в сервис, который крутить в Console или как сервис в операционке и дергать его по мере необходимости... Или это изврат?
Всему есть свое применение. Если на одной машине всё крутится - то как минимум лишние затраты на транспорт и лишний расход памяти.
0
Эксперт .NET
 Аватар для Usaga
14727 / 9497 / 1362
Регистрация: 21.01.2016
Сообщений: 35,818
27.05.2016, 18:27
Цитата Сообщение от JavaUser Посмотреть сообщение
Можно же всю работу с БД перенести в сервис, который крутить в Console или как сервис в операционке и дергать его по мере необходимости
Это ещё как можно (и часто практикуется). Но даже близко не в твоём случае. Не нужно переусердствовать.

Ты с принципами SOLID экспериментируешь опираясь на какую-то статью в интернете или в книге вычитал? Просто тема уже на две страницы разраслась и, вроде как, шибко никуда не продвинулась. Рекомендую прерваться и почитать специализированную литературу. Я на этом форуме уже многих, наверное, достал рекомендациями этой книги. Но я сам её от корки до корки прочитал и очень сильно ценю. Не смотря на название, книга рассматривает принцип SOLID весьма основательно. Рекомендую.
0
73 / 73 / 28
Регистрация: 06.10.2013
Сообщений: 334
30.06.2016, 14:18  [ТС]
Форумчане, подскажите плиз варианты того, где можно хранить жестко фиксированные числовые и текстовые данные, к примеру имя отчета?
И еще один вопрос:
Допустим, одной из функций программы является создание и сохранение отчетов в формате Excel. Я создаю следующий класс с атрибутами "Имя отчета", "Данные для отчета" и методами: "Создать отчет", "Показать отчет" и "Экспортировать отчет".
Нарушает ли такой класс принципы ООП? (по сути все что он делает - это действия связанные с отчетом... Или нужно предусмотреть классы для создания, отображения и экспорта? Ведь экспортировать можно не только в Excel но и в простой файл, в Word...
0
307 / 284 / 102
Регистрация: 06.05.2014
Сообщений: 861
30.06.2016, 15:38
1. В общем-то не принципиально, всё зависит от того, что это за данные. У нас например в сайте куча строк хранится в коде, т.к. они должны быть именно такими. А есть ещё куча в отдельных файлах, которые при необходимости можно менять.
2. Данные, создать и экспортировать - нормально, а вот показать, как-то не вписывается сюда.
По поводу экспорта, если тебе не нужно это делать в 100500 форматов, то можно сделать внутри перегрузку метода. Если форматов действительно много, то стоит задуматься о каком-то отдельном классе на основе интерфейса, которые будет делать экспорт, а уже в классе отчёта юзать интерфейс.
0
73 / 73 / 28
Регистрация: 06.10.2013
Сообщений: 334
30.06.2016, 15:43  [ТС]
Цитата Сообщение от BozKurt Посмотреть сообщение
стоит задуматься о каком-то отдельном классе на основе интерфейса
А какой в этом случае интерфейс составить?
Интерфейс ExcelExportInterface в котором прописать экспорт в эксель?
0
307 / 284 / 102
Регистрация: 06.05.2014
Сообщений: 861
30.06.2016, 17:29
JavaUser, интерфейс не имплементирует, он только описывает методы/свойства. Ты ведь понимаешь для чего они нужны?
Например можно сделать так:
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
class ReportManager
{
    public IExportReport Export { get; set; }
    public Report Report { get; set; }
    // ...
}
 
class Report
{
    // some class elements
}
 
interface IExportReport
{
    void Save(Report report);
}
class ExportReportToXLS : IExportReport
{
    public void Save(Report report)
    {
        // implementation
    }
}
class ExportReportToDOC : IExportReport
    {
    public void Save(Report report)
    {
        // implementation
    }
}
class ExportReportToPDF : IExportReport
    {
    public void Save(Report report)
    {
        // implementation
    }
}
class ExportReportToSomeFormat : IExportReport
{
    public void Save(Report report)
    {
        // implementation
    }
}
1
73 / 73 / 28
Регистрация: 06.10.2013
Сообщений: 334
01.07.2016, 09:51  [ТС]
Спасибо, BozKurt!
А можно еще уточнить, что должен делать и для чего нужен
C#
1
class ReportManager
?
Так как все описанные кроме него классы в принципе вопросов не вызывают.
0
307 / 284 / 102
Регистрация: 06.05.2014
Сообщений: 861
01.07.2016, 10:02
JavaUser, название класса и наличие в нём полей Export и Report, тебе ни о чём не говорят?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.07.2016, 10:02

кусок кода
Объясните этот кусок кода пжл begin i1:=0; maxls:=-1; //fnd max for i0:= 0 to versh-1 do begin ...

кусок кода js
народ помогите пожалуйста, я вообще незнаю js,но без него не обойтись помогите разобраться в коде,вот он сам: $('#name').focus(); ...

Не работает кусок кода
Помогите пожалуйста. #include "pch.h" #include <conio.h> #include <stdio.h> #include <math.h> #include <iostream> using...

Переделеать кусок кода из с++ в с
std::string temp; std::string start = "", finish = ""; int res = 0; // общее число вхождений writeline в текст. while...

Объясните кусок кода
var a:array of integer; i,j,n,m,c:integer; begin writeln('Элементов:');readln(n); for i:=1 to n do begin ...


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

Или воспользуйтесь поиском по форуму:
34
Ответ Создать тему
Новые блоги и статьи
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru