scorpion-ds
Новичок
Кто за что должен отвечать в начале разработки нового приложения?
Последнее время, я сам проектировал архитектуру приложений согласно брифу, сейчас меня перевели в другую команду, где начинается разработка нового приложения. Ни ТЗ ни брифа нет, есть документ, где описываются требуемые входящие и исходящие данные в виде JSON, но из них толком ничего неясно, как это должно в целом работать, само по себе это не приложение, а только сервис конвертации одного формата (из различных CRM, служб доставки, складов и т.п.) в другой, для "ядра" приложения (работа над ним еще не начата я так понимаю, также нет и ТЗ)
Тимлид уже второй месяц разрабатывает приложение, но по факту там еще ничего нет, изначально мы говорили, что я начну с нуля, но теперь он против, говорит продолжай существующие приложение, но я не согласен ни в целом с задумкой, ни с тем кодом который там уже есть.
В моем понимании, кто придумывает архитектуру, тот и начинает разработку, остальные подключаются позже.
В остальном код представляет собой "заглушки" и множество YML файлов, на базе которых по идеи должны формироваться "конвертеры" и взаимодействие с интерфейсом.
Последнее время, я сам проектировал архитектуру приложений согласно брифу, сейчас меня перевели в другую команду, где начинается разработка нового приложения. Ни ТЗ ни брифа нет, есть документ, где описываются требуемые входящие и исходящие данные в виде JSON, но из них толком ничего неясно, как это должно в целом работать, само по себе это не приложение, а только сервис конвертации одного формата (из различных CRM, служб доставки, складов и т.п.) в другой, для "ядра" приложения (работа над ним еще не начата я так понимаю, также нет и ТЗ)
Тимлид уже второй месяц разрабатывает приложение, но по факту там еще ничего нет, изначально мы говорили, что я начну с нуля, но теперь он против, говорит продолжай существующие приложение, но я не согласен ни в целом с задумкой, ни с тем кодом который там уже есть.
В моем понимании, кто придумывает архитектуру, тот и начинает разработку, остальные подключаются позже.
PHP:
<?php
namespace NAME\BaseApiBundle;
use Symfony\Component\Config\Definition\Exception\Exception;
use Symfony\Component\HttpKernel\Bundle\Bundle;
use Symfony\Component\Yaml\Yaml;
class NAMEBaseApiBundle extends Bundle
{
protected $bundleDirectory;
public function __construct($directory = __DIR__)
{
$this->bundleDirectory = $directory;
}
protected function parseMethodsConfiguration($directory) {
$this->bundleDirectory = $directory;
$file = $directory.'/Resources/config/methods.yml';
if (!file_exists($file))
throw new Exception(sprintf('You have to create methods.yml file into directory "%s/Resources/config"', $directory), 500);
return Yaml::parse(file_get_contents($file));
}
public function getMethodsConfiguration() {
return $this->parseMethodsConfiguration($this->bundleDirectory);
}
/**
* Возвращает данные по переданным полям из входящего запроса
* (обращение по апи к шине с другого ресурса)
*
* @param array $fields список полей метода
* @return array
*/
public function extractInput(Array $fields) {
include_once($this->bundleDirectory.'/Services/Api.php');
$api = new Api();
return $api->processInputData($fields);
}
public function getApiService($init) {
include_once($this->bundleDirectory.'/Services/Api.php');
return new Api($init);
}
}
PHP:
<?php
namespace NAME\BaseApiBundle;
class Api
{
/**
* Возвращает данные по переданным полям из входящего запроса
* (обращение по апи к шине с другого ресурса)
*
* @param array $fields список полей метода
* @return array
*/
public function processInputData(Array $fields)
{
$data = []; //get data from input
return $this->filterDataFields($data, $fields, 'out');
}
/**
* Обработка возврата из апи-метода
*
* @param array $data
* @param array $fields список полей метода
* @return array
*/
protected function processOutData(Array $data, Array $fields)
{
return $this->filterDataFields($data, $fields, 'out');
}
/**
* @param array $data
* @param array $fields
* @param string $direction
* @return array
*/
protected function filterDataFields(Array $data, Array $fields, string $direction)
{
$directionFields = array_filter($fields, function($field) use ($direction) {
return $field['direction'] == $direction;
});
return array_intersect_key($data, $directionFields);
}
}