Desigining надлежащие классы

Так как данные не предоставлены, я постараюсь ответить на ваш вопрос с примерами данных:

require(lubridate)
require(tidyverse)

## Create some sample data: 
time_index <- seq(from = as.POSIXct("2017-01-01 07:00"), 
                  to = as.POSIXct("2018-01-01 18:00"), by = "hour")
value <- rnorm(n = length(time_index))
data <- data.frame(time_index,value)


data <- data %>% mutate (hour = hour(time_index),
                         month = month(time_index)) %>%
  group_by(month,hour) 

head(data)
> data
# A tibble: 8,772 x 4
# Groups:   month, hour [288]
   time_index           value  hour month
   <dttm>               <dbl> <int> <dbl>
 1 2017-01-01 07:00:00 -0.626     7     1
 2 2017-01-01 08:00:00  0.184     8     1
 3 2017-01-01 09:00:00 -0.836     9     1
 4 2017-01-01 10:00:00  1.60     10     1
 5 2017-01-01 11:00:00  0.330    11     1
 6 2017-01-01 12:00:00 -0.820    12     1
 7 2017-01-01 13:00:00  0.487    13     1
 8 2017-01-01 14:00:00  0.738    14     1
 9 2017-01-01 15:00:00  0.576    15     1
10 2017-01-01 16:00:00 -0.305    16     1
# ... with 8,762 more rows

, а затем просто filter() комбинация час / месяц, которую вы хотели бы получить так:

[ 111]
5
задан jumbojs 20 February 2009 в 05:55
поделиться

7 ответов

если Вы знакомы с проектированием баз данных, конкретно понятие нормализации, то ответ легок: информационно-центрический класс должен представить объект в третьей нормальной форме

если это не полезно, попробуйте это вместо этого:

  • класс является набором элементов данных и методов, которые воздействуют на них
  • класс должен нести исключительную ответственность, т.е. он должен представить одну вещь в Вашей модели; если это представляет больше чем одну вещь затем, это должен быть больше чем один класс.
  • все элементы данных в классе должны быть логически связаны/связаны друг с другом; если они не, разделите его на два или больше класса
  • все методы в классе должны воздействовать только на их входные параметры, и элементы данных класса - видят Закон Demeter

это о том, насколько я могу пойти с общим абстрактным советом (не пишущий длинное эссе); Вы могли бы отправить один из своих классов для критического анализа при необходимости в определенном совете

2
ответ дан 14 December 2019 в 04:48
поделиться

я думаю, что Объектный дизайн является таким же искусства, как это - наука. Это занимает время и практика, чтобы понять, как разработать чистые и изящные классы. Возможно, если можно дать пример простого класса, Вы разработали это, Вы не счастливы с ТАК пользователями, может критиковать и дать подсказки. Я не уверен, что существуют любые общие ответы за пределами того, что Вы уже считали в текстах.

0
ответ дан 14 December 2019 в 04:48
поделиться

Создание классов, которые запускаются чистый и затем становятся грязными, является базовой частью OO, именно тогда Вы осуществляете рефакторинг. Много devs пытаются перейти к идеальному дизайну класса с самого начала, по моему опыту, это просто не возможно, вместо этого Вы спотыкаетесь вокруг, решая проблему и затем осуществляете рефакторинг. Можно получить, базовые классы и интерфейсы, поскольку дизайн появляется.

4
ответ дан 14 December 2019 в 04:48
поделиться

Наиболее уважаемым гуру OO, которого я лично знаю, является StackOverflow. Поместите свои имена классов здесь, и я считаю, что Вы получите приятное количество обзоров.

0
ответ дан 14 December 2019 в 04:48
поделиться

Метрики? Не so's, что Вы доверяли бы им.

Ваши классы делают задание получения работы программы и хранения его удобный в сопровождении через несколько изменений?

Если да, Вы делаете хорошо.

Если не, спросите себя почему не и затем измените то, что не работает.

0
ответ дан 14 December 2019 в 04:48
поделиться

Попытайтесь сфокусироваться на поведении вместо структуры. Объекты 'живут' объекты с поведением и обязанностями. Вы говорите им делать вещи. Взгляните на подход карты CRC, чтобы помочь Вам смоделировать этот путь.

2
ответ дан 14 December 2019 в 04:48
поделиться

Классы обычно привыкли к образцовому понятию проблемной области. После того как у Вас есть четко определенная проблема (иначе набор вариантов использования), Вы сможете идентифицировать всех участников. Подмножество участников будет внутренним системе, которую Вы разрабатываете. Запустите с одного большого черного квадрата как своя система. Продолжайте ломать его, как и когда у Вас будет больше информации. Когда у Вас есть уровень, где они больше не могут ломаться (в понятия в Вашей проблемной области), Вы начинаете получать свои классы.

Но затем, это - субъективное представление негуру. Я предложил бы щепотку соли меню.

0
ответ дан 14 December 2019 в 04:48
поделиться