powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Вынос части кода в другой класс в C#
41 сообщений из 41, показаны все 2 страниц
Вынос части кода в другой класс в C#
    #39877447
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день,

Помогите чайнику. Есть такой класс: XeroExport.cs. В нем очень много кода. Он выглядит примерно так:
Код: 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.
namespace Export
{
    public class XeroExport: ApiWrapper
    {
        public void ExcelExport()
        {
            DateTime startDate = DateTime.ParseExact(ConfigurationManager.AppSettings["PeriodStart"], "yyyy-MM-dd HH:mm:ss,fff", System.Globalization.CultureInfo.InvariantCulture);
            DateTime endDate = DateTime.ParseExact(ConfigurationManager.AppSettings["PeriodEnd"], "yyyy-MM-dd HH:mm:ss,fff", System.Globalization.CultureInfo.InvariantCulture);
            Call_BalanceSheet(startDate, endDate);
        }
        private List<InvoiceTableRow> converZInvouice(Invoice invoice)
        {
        }
        private String convertInvoiceToString(Invoice invoice)
        {
        }
        private void saveInvoices(string filename, List<Invoice> invoices)
        {
        }
        private void GetInvoices()
        {
        }
        private int GetTotalInvoiceCount()
        {
        }
        private int GetTotalContactCount()
        {
        }
        private int GetTotalJournalCount()
        {
        }
        public int CheckReportStatus(string ReportName)
        {
            ...  
            return ReportStatus;
        }
        private void Call_BalanceSheet(DateTime periodStart, DateTime periodEnd)
        {
            int reportStatus = CheckReportStatus("Balance Sheet");
            if (reportStatus == 1)
            {
                 ...
                 Insert_BalanceSheet(monthStartDate, monthEndDate, reportDate);
                 ...
            }
        }
        private void Insert_BalanceSheet(DateTime periodStart, DateTime periodEnd, DateTime runDate)
        {
            ...   
            var pal = Api.Reports.BalanceSheet(periodStart, null, null, false, null, null, null);
        }
    }
}



Я хочу методы Call_BalanceSheet и Insert_BalanceSheet вынести в отдельный класс: BalanceSheet.cs:

Код: 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.
using System;
using System.Configuration;
using System.Data.SqlClient;
using System.Data;
using Xero.Api.Example.MVC.Helpers;

namespace Export
{

    public class BalanceSheet
    {
        private void Call_BalanceSheet(DateTime periodStart, DateTime periodEnd)
        {
            int reportStatus = CheckReportStatus("Balance Sheet");
            if (reportStatus == 1)
            {
               ... 
               Insert_BalanceSheet(monthStartDate, monthEndDate, reportDate);
            }
        }
        private void Insert_BalanceSheet(DateTime periodStart, DateTime periodEnd, DateTime runDate)
        {
             ....
             var pal = Api.Reports.BalanceSheet(periodStart, null, null, false, null, null, null);
        }
    }

}



После того как я это делаю, XeroExport.cs не находит Call_BalanceSheet, BalanceSheet.cs не находит CheckReportStatus и Api.

Как сделать так, чтобы они видели методы друг друга?

Не ругайте сильно, опыта программирования у меня не много.

Спасибо.
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877476
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно, не найдет. Они же у тебя как private объявлены.
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877484
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще, если зашла речь о такой декомпозиции, то тебе лучше сразу изучить про "Dependency Injection" и делать все это по SOLID. Могу посоветовать вот такую книгу: Марк Симан: Внедрение зависимостей в .NET
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877490
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже немного разобрался как достучаться до Call_BalanceSheet и CheckReportStatus:
В ExcelExport создать переменную:
Код: c#
1.
2.
3.
            
var balancesheet = new BalanceSheet();
balancesheet.Call_BalanceSheet(startDate, endDate);



И также в BalanceSheet:
Код: c#
1.
2.
var checkReportStatus = new XeroExport();        
int reportStatus = checkReportStatus.CheckReportStatus("Balance Sheet");



А вот с Api никак.

Скопировал в BalanceSheet.cs все "using" из XeroExport.cs:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
using System;
using System.Configuration;
using System.Data.SqlClient;
using System.Data;
using System.Collections.Generic;
using Xero.Api.Core.Model;
using Xero.Api.Core;
using Xero.Api.Payroll.Australia.Model;
using System.Linq;



Все равно не работает.
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877499
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatКонечно, не найдет. Они же у тебя как private объявлены.

Это я исправил.
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877510
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот с Api не могу разобраться. Она в другом проекте. Почему-то XeroExport.cs ее видит, а вот BalanceSheet.cs - нет.
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877518
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roust_mА вот с Api не могу разобраться. Она в другом проекте. Почему-то XeroExport.cs ее видит, а вот BalanceSheet.cs - нет.
Наверное проект не добавлен в "References". В Solution Explorer правый клик по "Dependencies", потом "Add reference -> Solution" и поставить галку на нужный проект.
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877558
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatRoust_mА вот с Api не могу разобраться. Она в другом проекте. Почему-то XeroExport.cs ее видит, а вот BalanceSheet.cs - нет.
Наверное проект не добавлен в "References". В Solution Explorer правый клик по "Dependencies", потом "Add reference -> Solution" и поставить галку на нужный проект.

Но ведь это на уровне проекта? XeroExport.cs и BalanceSheet.cs - в одном проекте и даже в одном namespace. Api - в другом проекте.

Почему XeroExport.cs видит Api, а BalanceSheet.cs - не видит?
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877562
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А solution - один на всех
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877564
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roust_mfkthatпропущено...

Наверное проект не добавлен в "References". В Solution Explorer правый клик по "Dependencies", потом "Add reference -> Solution" и поставить галку на нужный проект.

Но ведь это на уровне проекта? XeroExport.cs и BalanceSheet.cs - в одном проекте и даже в одном namespace. Api - в другом проекте.

Почему XeroExport.cs видит Api, а BalanceSheet.cs - не видит?

потому что (покажите этот класс):
Код: c#
1.
public class XeroExport: ApiWrapper
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877566
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roust_mНо ведь это на уровне проекта? XeroExport.cs и BalanceSheet.cs - в одном проекте и даже в одном namespace. Api - в другом проекте.
Почему XeroExport.cs видит Api, а BalanceSheet.cs - не видит?
C using-ами все ок?
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877567
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно сделать partial class, раз уж размер исходника так смущает.
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877571
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_OneRoust_mпропущено...


Но ведь это на уровне проекта? XeroExport.cs и BalanceSheet.cs - в одном проекте и даже в одном namespace. Api - в другом проекте.

Почему XeroExport.cs видит Api, а BalanceSheet.cs - не видит?

потому что (покажите этот класс):
Код: c#
1.
public class XeroExport: ApiWrapper



А где его показать? В BalanceSheet.cs?
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877574
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatRoust_mНо ведь это на уровне проекта? XeroExport.cs и BalanceSheet.cs - в одном проекте и даже в одном namespace. Api - в другом проекте.
Почему XeroExport.cs видит Api, а BalanceSheet.cs - не видит?
C using-ами все ок?

Да, юзинги одинаковые у обоих классов.
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877577
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_OneRoust_mпропущено...


Но ведь это на уровне проекта? XeroExport.cs и BalanceSheet.cs - в одном проекте и даже в одном namespace. Api - в другом проекте.

Почему XeroExport.cs видит Api, а BalanceSheet.cs - не видит?

потому что (покажите этот класс):
Код: c#
1.
public class XeroExport: ApiWrapper



Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
   public class ApiWrapper
    {
        public ApiWrapper()
        {
            System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
        }

        private IXeroCoreApi _api;
        protected IXeroCoreApi Api
        {
            get { return _api ?? (_api = CreateCoreApi()); }
        }

        private static IXeroCoreApi CreateCoreApi()
        {
            return new Xero.Api.Example.Applications.Private.Core
            {
                UserAgent = "Xero Api - Integration tests"
            };
        }

    }
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877579
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныМожно сделать partial class, раз уж размер исходника так смущает.
Ага. При желании, можно вообще все приложение сделать как один большой partial класс. А при большом желании можно и хер сломать, хоть он и без костей. Как будто приложение по классам разбивают только чтобы отдельные файлы исходников поменьше были.
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877580
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныМожно сделать partial class, раз уж размер исходника так смущает.

Это интересная идея, почитаю на эту тему. А то я замучался связывать эти классы. А кода действительно много, пока долистаешь до нужного класса...
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877582
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatСон Веры ПавловныМожно сделать partial class, раз уж размер исходника так смущает.
Ага. При желании, можно вообще все приложение сделать как один большой partial класс. А при большом желании можно и хер сломать, хоть он и без костей. Как будто приложение по классам разбивают только чтобы отдельные файлы исходников поменьше были.

Мне такие высоты рано пока. Мне просто для удобства. Слишком много исходника на одном файле.
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877598
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roust_mЭто интересная идея, почитаю на эту тему. А то я замучался связывать эти классы. А кода действительно много, пока долистаешь до нужного класса...
Паршиал классы придумали для вполне определенной цели - разнести по разным файлам сгенеренную каким-либо генератором часть класса и ту часть класса, которая пишется руками. Использовать их для чего-то другого нафиг не следует. Если твой класс большой, то его просто надо разбивать на несколько. Листать по классам, в чем проблема-то - "F12" ("Go to definition") и попадаешь сразу в нужное тебе место. Можно и в обратную сторону - "Find all references" - и сразу видишь что и где какой-либо твой код вызывает.
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877633
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatКак будто приложение по классам разбивают только чтобы отдельные файлы исходников поменьше были.
Ну, исходя из стартового постинга, ТС хочет разбить на классы именно по этой причине.
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877705
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны,

Спасибо, очень хорошо получилось, гораздо легче работать стало.
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877815
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К слову, в части реализации винформсового DataGridView (причем не похоже, что это автосгенеренный код) 29999 строк. И ничего, писали как-то люди, работали с этим.
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877934
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatПаршиал классы придумали для вполне определенной цели - разнести по разным файлам сгенеренную каким-либо генератором часть класса и ту часть класса, которая пишется руками. Использовать их для чего-то другого нафиг не следует. Если твой класс большой, то его просто надо разбивать на несколько.
То же самое когда-то говорилось и о регионах (regions). Хотите сказать, не используете их?
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877939
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LRТо же самое когда-то говорилось и о регионах (regions). Хотите сказать, не используете их?
Нет. А зачем? Если класс большой, то наверняка он нарушает принцип "Single responsibility" и его надо просто разбивать на меньшие. А регионы - это просто разновидность комментариев, с тем отличием, что их сворачивать можно в IDE. Функциональной роли они никакой не играют.
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877954
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatНет. А зачем? Если класс большой, то наверняка он нарушает принцип "Single responsibility" и его надо просто разбивать на меньшие. А регионы - это просто разновидность комментариев, с тем отличием, что их сворачивать можно в IDE. Функциональной роли они никакой не играют.
Т.е., для каждого класса свой файл-исходник? И если классов в проекте очень много - много и файлов. Но кому-то проще структурировать с помощью регионов в нескольких файлах. Партиал классы тоже можна использовать для структурирования (по интерфейсам/контрактам или по кодерам). Еще их иногда удобно использовать в сочетании с "Add As Link" (для нескольких проектов), это дает возможность избавится от необходимости создания отдельной сборки с базовым классом.
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877955
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LRТ.е., для каждого класса свой файл-исходник?даже для интерфейса с одним членом
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877957
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LR,

Для нетленного "hello world" м.б. А когда у тебя в проекте одного шарпа почти 200 тыс. строк кода, то как-то сколько у тебя там файлов - тысяча или три особой разницы уже не имеет и лучше просто тупо следовать правилу - один интерфейс/класс/enum - один файл. По крайней мере при этом не заморачиваешь голову тем в какой файл что поместить.
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877958
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не забудем также и про source control
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39878205
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LRТ.е., для каждого класса свой файл-исходник?

это хорошая практика.
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39878454
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roust_mДобрый день,

Помогите чайнику. Есть такой класс: XeroExport.cs. В нем очень много кода. Он выглядит примерно так:
Код: 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.
namespace Export
{
    public class XeroExport: ApiWrapper
    {
        public void ExcelExport()
        {
            DateTime startDate = DateTime.ParseExact(ConfigurationManager.AppSettings["PeriodStart"], "yyyy-MM-dd HH:mm:ss,fff", System.Globalization.CultureInfo.InvariantCulture);
            DateTime endDate = DateTime.ParseExact(ConfigurationManager.AppSettings["PeriodEnd"], "yyyy-MM-dd HH:mm:ss,fff", System.Globalization.CultureInfo.InvariantCulture);
            Call_BalanceSheet(startDate, endDate);
        }
        private List<InvoiceTableRow> converZInvouice(Invoice invoice)
        {
        }
        private String convertInvoiceToString(Invoice invoice)
        {
        }
        private void saveInvoices(string filename, List<Invoice> invoices)
        {
        }
        private void GetInvoices()
        {
        }
        private int GetTotalInvoiceCount()
        {
        }
        private int GetTotalContactCount()
        {
        }
        private int GetTotalJournalCount()
        {
        }
        public int CheckReportStatus(string ReportName)
        {
            ...  
            return ReportStatus;
        }
        private void Call_BalanceSheet(DateTime periodStart, DateTime periodEnd)
        {
            int reportStatus = CheckReportStatus("Balance Sheet");
            if (reportStatus == 1)
            {
                 ...
                 Insert_BalanceSheet(monthStartDate, monthEndDate, reportDate);
                 ...
            }
        }
        private void Insert_BalanceSheet(DateTime periodStart, DateTime periodEnd, DateTime runDate)
        {
            ...   
            var pal = Api.Reports.BalanceSheet(periodStart, null, null, false, null, null, null);
        }
    }
}



Я хочу методы Call_BalanceSheet и Insert_BalanceSheet вынести в отдельный класс: BalanceSheet.cs:

Код: 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.
using System;
using System.Configuration;
using System.Data.SqlClient;
using System.Data;
using Xero.Api.Example.MVC.Helpers;

namespace Export
{

    public class BalanceSheet
    {
        private void Call_BalanceSheet(DateTime periodStart, DateTime periodEnd)
        {
            int reportStatus = CheckReportStatus("Balance Sheet");
            if (reportStatus == 1)
            {
               ... 
               Insert_BalanceSheet(monthStartDate, monthEndDate, reportDate);
            }
        }
        private void Insert_BalanceSheet(DateTime periodStart, DateTime periodEnd, DateTime runDate)
        {
             ....
             var pal = Api.Reports.BalanceSheet(periodStart, null, null, false, null, null, null);
        }
    }

}



После того как я это делаю, XeroExport.cs не находит Call_BalanceSheet, BalanceSheet.cs не находит CheckReportStatus и Api.

Как сделать так, чтобы они видели методы друг друга?

Не ругайте сильно, опыта программирования у меня не много.

Спасибо.

добавлю свои 5 коп, так, чисто. набирайся опыта. декомпозиция задачи на подзадачи это победа над сложностью. она начинается в осмыслении задачи. а что дробить - постройку моста, копку огорода, или "класс" - это дело техники
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39878556
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatLR,

Для нетленного "hello world" м.б. А когда у тебя в проекте одного шарпа почти 200 тыс. строк кода, то как-то сколько у тебя там файлов - тысяча или три особой разницы уже не имеет и лучше просто тупо следовать правилу - один интерфейс/класс/enum - один файл. По крайней мере при этом не заморачиваешь голову тем в какой файл что поместить.
И чем же "лучше просто тупо следовать правилу - один интерфейс/класс/enum - один файл"? Потому что какой-нить условный Фаулер сформулировал такое правило в условном 2000-м году? И с тех пор в условной девелоперской конторе существует это правило с перефразировкой для высших руководителей "это оптимально при высокой текучести кадров/кодеров". Правила создают люди. Правила меняются, когда изменяются обстоятельства/возможности, но только если люди не "тупо им следуют". Предлагаю правило: один "use case"/"предметный функционал"/"инфо-кластер" - один файл - чем плохое правило?)))
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39878581
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LR,

Да мне пох - напихай хоть вообще все в один файл. Чем больше пионэры наговнокодят, тем больше мне потом возможностей бабла срубить - я это еще лет 10 назад понял :))
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39878582
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LRИ чем же "лучше просто тупо следовать правилу - один интерфейс/класс/enum - один файл"? Потому что какой-нить условный Фаулер сформулировал такое правило в условном 2000-м году?

Правила формулируются на основе совокупного опыта. Если вы не знаете или не понимаете чего-то, это вовсе не значит, что смысла в этом нет.


LRПравила создают люди. Правила меняются, когда изменяются обстоятельства/возможности, но только если люди не "тупо им следуют". Предлагаю правило: один "use case"/"предметный функционал"/"инфо-кластер" - один файл - чем плохое правило?)))

Эволюция происходит в процессе накопления опыта. Правила как создаются, так и меняются на основе систематизации такого опыта.

Никто же не виноват, что это у вас всё с потолка берётся, и вы поэтому так к этому относитесь.
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39878649
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttLRИ чем же "лучше просто тупо следовать правилу - один интерфейс/класс/enum - один файл"? Потому что какой-нить условный Фаулер сформулировал такое правило в условном 2000-м году?

Правила формулируются на основе совокупного опыта. Если вы не знаете или не понимаете чего-то, это вовсе не значит, что смысла в этом нет.


LRПравила создают люди. Правила меняются, когда изменяются обстоятельства/возможности, но только если люди не "тупо им следуют". Предлагаю правило: один "use case"/"предметный функционал"/"инфо-кластер" - один файл - чем плохое правило?)))

Эволюция происходит в процессе накопления опыта. Правила как создаются, так и меняются на основе систематизации такого опыта.

Никто же не виноват, что это у вас всё с потолка берётся, и вы поэтому так к этому относитесь.

хвост, твоим постам немного уменьшить желчи. ты опытный разраб, без сомнения, но желчный какой-то, злой
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39878754
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bachхвост, твоим постам немного уменьшить желчи. ты опытный разраб, без сомнения, но желчный какой-то, злой

Я вообще не понял какую желчь вы тут увидели.

Просто уже поддостало, когда люди кладут болт на знания, накопленный опыт. Вертели они на одном месте всё это. У них же есть мнение. Абсолютно ни на чём не основанное, просто мнение. Ещё больше раздражает, когда начинают оперировать терминами нравится/не нравится, вопрос вкуса. Такое ощущение, что мы тут в мире моды, аляповых трусов и платьев горошек. Какого хрена?

Не согласны с чем-то, приводите аргументы. Так и так. А не вот это вот "условный Фаулер сформулировал в условном хреновом году".

Если вас так же лечить, например, будут. Подорожником, потому что кому-то из врачей ПОКАЗАЛОСЬ, что так лучше, а в книгах всякую ерунду пишут для дебилов -- зачем читать? Как вы к этому отнесётесь?
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39878760
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatLR,

Да мне пох - напихай хоть вообще все в один файл. Чем больше пионэры наговнокодят, тем больше мне потом возможностей бабла срубить - я это еще лет 10 назад понял :))
Аналогично пох - продолжай тупо следовать :)
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39878780
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LRfkthatПаршиал классы придумали для вполне определенной цели - разнести по разным файлам сгенеренную каким-либо генератором часть класса и ту часть класса, которая пишется руками. Использовать их для чего-то другого нафиг не следует. Если твой класс большой, то его просто надо разбивать на несколько.
То же самое когда-то говорилось и о регионах (regions). Хотите сказать, не используете их?
Лет десять уж точно не использую.
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39878783
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LRfkthatLR,

Для нетленного "hello world" м.б. А когда у тебя в проекте одного шарпа почти 200 тыс. строк кода, то как-то сколько у тебя там файлов - тысяча или три особой разницы уже не имеет и лучше просто тупо следовать правилу - один интерфейс/класс/enum - один файл. По крайней мере при этом не заморачиваешь голову тем в какой файл что поместить.
И чем же "лучше просто тупо следовать правилу - один интерфейс/класс/enum - один файл"? Потому что какой-нить условный Фаулер сформулировал такое правило в условном 2000-м году? И с тех пор в условной девелоперской конторе существует это правило с перефразировкой для высших руководителей "это оптимально при высокой текучести кадров/кодеров". Правила создают люди. Правила меняются, когда изменяются обстоятельства/возможности, но только если люди не "тупо им следуют". Предлагаю правило: один "use case"/"предметный функционал"/"инфо-кластер" - один файл - чем плохое правило?)))
А можете раскрыть, что такое один "use case"/"предметный функционал"/"инфо-кластер" в вашем понимании?
И как это согласуется, или чем отличается от принципов SOLID?
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39879021
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий МухА можете раскрыть, что такое один "use case"/"предметный функционал"/"инфо-кластер" в вашем понимании?
И как это согласуется, или чем отличается от принципов SOLID?
В моем понимании принципы оформления кода и принципы проектирования - разные вещи (как холодное/горячее и горькое/сладкое). Т.е., следовать правилу "один интерфейс/класс/enum - один файл" в надежде, что это каким-то боком соотносится с принципами проектирования (с тем же упоминавшимся здесь "single responsibility") - очевидное заблуждение. Простой пример: enum, который задействуется только в методах некоторого класса. Очевидно, что изменения в этом enum будут делаться одновременно с изменениями в этом классе. И вот, с точки зрения того же SRP, код enum и класса правильней размещать в отдельных файлах или в одном? Это к тому, что принципы оформления кода более субъективны чем принципы проектирования (имхо, начиная новый проект, команда разработчиков сама должна выработать правила оформления кода).
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39879025
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LR,

Что вам мешает свой несчастный енум тогда засунуть внутрь класса? :)

Учитывая, что вы его больше нигде не используете, имеет смысл сделать его ещё и приватным, чтобы не торчал наружу и не смущал остальных разработчиков.
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39879026
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LRЭто к тому, что принципы оформления кода более субъективны чем принципы проектирования (имхо, начиная новый проект, команда разработчиков сама должна выработать правила оформления кода).

Я бы всё-таки хотел бы услышать адекватные обоснования тем или иным решениям.

Вот этот субъективизм вообще ни в одно место. Это детский сад на лямочках.
...
Рейтинг: 0 / 0
41 сообщений из 41, показаны все 2 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Вынос части кода в другой класс в C#
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]