Лучшие практики / шаблоны проектирования для переформатирования данных - PullRequest
0 голосов
/ 18 октября 2018

Мой проект - это микросервисы, которые соединяют два основных сервиса, мой проект получает данные с одного сервера, форматирует их, а затем использует эти данные для создания файла XML, а затем загружает XML в другой сервис.Мне просто интересно, есть ли какой-либо шаблон проектирования для этого вида микро-сервисов.

это JSON, полученный от внутреннего сервера:

{
    "employee_id": 100464,
    "organization_id": 93,
    "start_date": "2018-09-05",
    "first_name": "Tom",
    "departments": [
        {
            "id": 2761,
            "name": "Sale",
            "organization_id": 93
        },
        {
            "id": 2762,
            "name": "Product",
            "organization_id": 93
        }
    ],
    "primary_department": {
        "id": 2761,
        "name": "Product",
        "organization_id": 93
    }
}

Это формат данных, который яхочу, поэтому мне нужно выполнить некоторое форматирование данных:

{
    "employee_id": 100464,
    "organization_id": 93,
    "first_name": "Tom",
    "target_department": {
        "department_id": 2761,
        "name": "Product",
        "organization_id": 93,
        "is_primary_department": true
    }
}

логика для определения target_department -

departments = hsh.delete :departments
primary_department = hsh.delete :primary_department
hsh[:target_department] = departments.select do |department|
  department[:id] ==another_obj[:group_id]
end.first
hsh[:target_department][:is_home_department] = (hsh[:target_department][:id] == primary_department[:id])
hsh[:target_department][:department_id] = hsh[:target_department].delete :id

Как видите, мне нужно удалить, переименовать ипереформатировать атрибуты и структуру данных.

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

Я использую Rails, поэтому любой хороший гем или проект имеет дело с подобной проблемой?

Ответы [ 2 ]

0 голосов
/ 21 октября 2018

Программная работа напрямую с данными типа json / xml часто утомительна.Однажды я работал в компании, которая занималась этим ВЕЗДЕ, и это было больно.Я бы предложил десериализацию ваших данных в представление графов объектов.Также есть класс результата, который может быть создан путем запроса / обработки графа входных объектов.Затем в конце просто сериализуйте ваш объект результата обратно в json.

Скорее всего, вы найдете встроенное решение или решение с открытым исходным кодом для обработки сериализации и десериализации.

0 голосов
/ 18 октября 2018

Я не знаю о лучших практиках, но это должно делать то, что вы хотите.

{
  "employee_id": 100464,
  "organization_id": 93,
  "start_date": "2018-09-05",
  "first_name": "Tom",
  "departments": [
    {
      "id": 2761,
      "name": "Sale",
      "organization_id": 93
    },
    {
      "id": 2762,
      "name": "Product",
      "organization_id": 93
    }
  ],
  "primary_department": {
    "id": 2761,
    "name": "Product",
    "organization_id": 93
  }
}.with_indifferent_access.except(:start_date, :departments).transform_keys do |k|
  k == 'primary_department' ? 'target_department' : k
end.tap do |hsh|
  if hsh['target_department']
    hsh['target_department']['is_primary_department'] = true
    hsh['target_department']['department_id'] = hsh['target_department']['id']
    hsh['target_department'].delete('id')
  end
  puts hsh
end

В консоли это вернет:

{
  "employee_id"=>100464,
  "organization_id"=>93,
  "first_name"=>"Tom",
  "target_department"=>{
    "name"=>"Product", 
    "organization_id"=>93, 
    "is_primary_department"=>true, 
    "department_id"=>2761
  }
}

Кстати, в вашемВ выходном примере вы указываете имя target_department как «aProduct».Это опечатка?

...