Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Организация разработки крупного проекта через API

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
testergame
Отправлено: 09 Октября, 2012 - 06:34:54
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Окт. 2012  


Помог: 0 раз(а)




Доброго времени суток.
Есть проект браузерная онлайн игра которая разрабатывается уже какое-то время, только мной. То есть я единственный у кого есть доступ к php скриптам.

Из за того, что я работаю один в целом проект развивается очень медленно.
И вроде есть деньги нанять еще 2-3 php-программиста, но проблема в том, что за время разработки на мой взгляд проект накопил достаточно много ценной информации которую просто так не даш в свободный доступ. Попросту я боюсь, что нанимая новых программистов кто-то из них обязательно унесет с собой части проекта или того хуже создаст копию, что-то на подобие онлайн игр: комбатса(BK) и олдкомбатса(oldBK).

У меня возникла такая идея, не давать новому программисту доступ к самому проекту, а дать доступ к API проекта, что-то на подобие API ВКонтакте.

Например в проекте есть следующие модули:
/base
/chat
/shop
/battle

Предположим, что у нас есть три программиста каждый работает только над своим модулем:
/base - Общяя папка для всех программстов
/chat - Программист #1 работает над чатом
/shop - Программист #2 работает над магазином
/battle - Программист #3 работает над боем

Соответственно программист #1 имеет доступ только к папкам /base и /chat
Соответственно программист #2 имеет доступ только к папкам /base и /shop
ну и т.д.


Но вот, что если программисту #3 нужна функция для работы с чатом, например:
Программист #3 написал функцию задача которой по завершению боя написать в чате сколько пользователь получил опыта.

Для подобной реализации программсту #3 нужен класс для отправки сообщений в чат. Но к этому классу у него нет доступа. А как я уже сказал дать такой доступ я не могу.

Какую я предлагаю реализацию.
Для получения подобного метода(отправки сообщений в чат) программист #3 просит меня или напрямую обращается к программисту #1 с просьбой сделать данный метод доступным через chat.api, а дальше один в один как API ВКонтакте. Программисту #3 для отправки сообщений в чат достаточно будет выполнить что-то вроде такого:
file_get_contents('http://chat[dot]api[dot]game[dot]ru/?method=[dot][dot][dot]sage&msg=Бой закончен, Вы получили 5 опыта.');


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

Но здесь есть один минус, это медленный http протокол с которым теперь будет взаимодействовать api.

Какие еще существуют подобные способы организации api кроме http протокола?

Какие вообще варианты разработок крупных проектов существуют?

Например, как устроена организация разработки того же контакта или фейсбука?
 
 Top
tato
Отправлено: 09 Октября, 2012 - 08:41:07
Post Id



Посетитель


Покинул форум
Сообщений всего: 468
Дата рег-ции: Сент. 2011  
Откуда: Владивосток


Помог: 8 раз(а)




Почитайте, что такое интерфейсы и абстрактные класы.
лично Я вижу это таким образом. например:

PHP:
скопировать код в буфер обмена
  1.  
  2. abstract class AChat
  3. {
  4.     /**
  5.      * Sends message to chat
  6.      */
  7.     abstract public function sendToChat( $string );
  8. }
  9.  


Разработчик1 обязан расширить эту абстракцию.

соответственно разработчик2 в своем коде пишет:
PHP:
скопировать код в буфер обмена
  1.  
  2. class Battle
  3. {
  4.     public function endOfBattle( AChat $chat )
  5.     {
  6.         $chat->sendToChat( 'you win!' );
  7.     }
  8. }
  9.  


Поясню, Програмист1 пишет класс расширяющий абстракцию, програмист2 понятия не имеет как клас называется и что он делает, но он знает, что клас расширен из AChat и вседствии этого у него должен быть метод sendToChat.

И на последок, Вам лично необходимо будет только звязать все в одно целое.

PHP:
скопировать код в буфер обмена
  1.  
  2. class Game
  3. {
  4.     public function mySuperPuperGame()
  5.     {
  6.          // Вы-то знаете названия класов (=
  7.         $chat = new SuperChat();
  8.         $battle = new AwesomeBattle();
  9.  
  10.         $battle->endOfBattle( $chat );
  11.     }
  12. }
  13.  

(Отредактировано автором: 09 Октября, 2012 - 08:41:46)



-----
просто ?: сложно
 
 Top
DlTA
Отправлено: 09 Октября, 2012 - 08:48:06
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




tato пишет:
Поясню, Програмист1 пишет класс расширяющий абстракцию, програмист2 понятия не имеет как клас называется и что он делает, но он знает, что клас расширен из AChat и вседствии этого у него должен быть метод sendToChat.
ну да, попутно каждый из них должен будет выполнить кучу!!! работы, причем ненужной по созданию затычек для этих классов. в итоге производительность сильно не увеличится, а вот траты на их время существенно, а иначе никто не захочет вот так тратить время.
 
 Top
tato
Отправлено: 09 Октября, 2012 - 10:13:49
Post Id



Посетитель


Покинул форум
Сообщений всего: 468
Дата рег-ции: Сент. 2011  
Откуда: Владивосток


Помог: 8 раз(а)




DlTA пишет:
ну да, попутно каждый из них должен будет выполнить кучу!!! работы, причем ненужной по созданию затычек для этих классов. в итоге производительность сильно не увеличится, а вот траты на их время существенно, а иначе никто не захочет вот так тратить время.


Начнем с того, что никто не захочет тратить время на написание проекта о котором ему ничего не известно, ни концепции, ни идеи.
Любой нормальный проект это куча работы, а затычки пишут те кто не понимает для чего все это нужно.
И вопрос между прочим не в производительности, а в разделении проекта на части, дабы другие программеры, не знали кто, что делает.


-----
просто ?: сложно
 
 Top
Zuldek
Отправлено: 09 Октября, 2012 - 10:15:35
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




С крупными проектами работа обычно уже налажена.
Открывают твою ветку исходников, настраиваешь NetBeans на работу с репозиториями, где тебе уже открыто то что нужно и пользуешься.
Обычно если проекты крупные, то приняты строгие стандарты по стилю и комментариям, потому разобраться не сложно. Душа радуется, когда откроешь любой класс и видишь комментарии перед объявлением всех открытых методов, что они получают, что возвращают.
Если что-то не понятно, на этот случай есть руководитель проекта которого ты можешь в любой момент дернуть по скайпу и расскажет что нужно, откроет доступ к нужным веткам или расскажет для чего нужны те или иные интерфейсы если сам не вкурил и нет возможности спросить того кто писал код.
Тостеры, когда в конце дня проверяют что ты накодил, отписывают найденные баги и проблемы в багтрекер, рук-ль кидает баги на того разработчика который занимается этим модулем.
 
 Top
caballero
Отправлено: 09 Октября, 2012 - 12:02:24
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
что за время разработки на мой взгляд проект накопил достаточно много ценной информации которую просто так не даш в свободный доступ

еще один параноик
то что твой доморощеный проект "накопил" уже давным давно накоплено в тысячах проектов лежащих в инете в свободном доступе.

тебе еще надо будет вложить кучу бабла чтобы твой проект вообще кто нибудь заметил


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
testergame
Отправлено: 09 Октября, 2012 - 12:38:17
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Окт. 2012  


Помог: 0 раз(а)




Хочу сразу пояснить несколько моментов.
Проекту уже более двух лет.
Каждый день в игре онлайн от 1200 до 1600 пользователей.
То есть проект уже какое-то время стабильно работает на рынке.

Мой вопрос был в основном направлен исключительно на новую идею организации разработки через HTTP API. Насколько это хорошо или плохо?

Главное условие чтобы новый программист не имел доступа к другим модулям проектам.

P.S. Конечно, если я буду реализовывать подобный подход через API, то я и все остальные программисты будем подробно все документировать для вновь прибывших программистов.
(Добавление)
tato пишет:
Почитайте, что такое интерфейсы и абстрактные классы.
Поясню, Програмист1 пишет класс расширяющий абстракцию, програмист2 понятия не имеет как класс называется и что он делает, но он знает, что класс расширен из AChat и в следствии этого у него должен быть метод sendToChat.

И на последок, Вам лично необходимо будет только завязать все в одно целое.

PHP:
скопировать код в буфер обмена
  1.     class Game
  2.     {
  3.         public function mySuperPuperGame()
  4.         {
  5.              // Вы-то знаете названия класов (=
  6.             $chat = new SuperChat();
  7.             $battle = new AwesomeBattle();
  8.      
  9.             $battle->endOfBattle( $chat );
  10.         }
  11.     }



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

Понимаете если мы пишем:

То сам класс SuperChat уже как то подключен к скрипту, а все что подключено к скипту на уровне php через include и т.д. можно просканить и скачать.
 
 Top
Zuldek
Отправлено: 09 Октября, 2012 - 13:01:51
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




testergame пишет:
В данном подходе, что мешает вновь прибывшему программисту просканить и скачать это файл, а за одно и все остальные файлы к которым он по задумке вроде не имеет доступа?

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

(Отредактировано автором: 09 Октября, 2012 - 13:10:58)

 
 Top
DlTA
Отправлено: 09 Октября, 2012 - 13:12:57
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




Zuldek а можно подробней про доступ к веткам, какие возможны ограничения, и какой именно SVN сервер используется?
 
 Top
caballero
Отправлено: 09 Октября, 2012 - 13:14:49
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
SVN в помощь.

и как тут поможет svn?

хочешь прятать исходники пиши на яве а не на на PHP


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
testergame
Отправлено: 09 Октября, 2012 - 13:17:46
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Окт. 2012  


Помог: 0 раз(а)




Zuldek пишет:
SVN в помощь.


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

Это и есть основная проблема.
 
 Top
Zuldek
Отправлено: 09 Октября, 2012 - 13:26:19
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




DlTA пишет:
Zuldek а можно подробней про доступ к веткам, какие возможны ограничения, и какой именно SVN сервер используется?

Мне в основном доводилось работать с svnserve и Subversion соответственно. Хотя принципы у всех одинаковые.
В последних версиях количество разграничений и настроек там много (разумеется, не просто права на директории).
Ветки это моя фривольная интерпретация дерева файлов модуля проекта к исходникам которого открывают доступ.
 
 Top
caballero
Отправлено: 09 Октября, 2012 - 13:35:28
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
Это и есть основная проблема.

проблемма как я уже намекал исключительно у тебя в голове.

С возрастом и опытом это пройдет.

По молодости я тоже думал что мои проекты всем интересны. Потом оказалось что надо еще нехило заплатить человеку чтобы он согласился ковырятся в твоем коде и дорабатывать его.


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Zuldek
Отправлено: 09 Октября, 2012 - 13:40:21
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




testergame пишет:
если я могу закачать и выполнить php файл на сервере

А зачем разработчику давать возможность загружать модули на боевой сервер? Они пишутся таким образом чтобы их можно было протестировать как модуль, независимо от основного проекта, иначе это уже его неправильная организация изначально.

Если у вас идут инклуды подобного: include somethingwithoutmygamedoesnotwor k.php
Содержащие основную массу всех классов движка то это уже неправильная организация.
Обычно идет подключение базовых классов (инструментарий для работы с моделями и т.д.)
И открытых интерфейсов через которые общаемся с другими модулями.
Соответственно для успешного тестирования модуля в этом случае необходимо просто передать ему то что будут передавать модули с ним взаимодействующие и проверить возвращаемые результаты. Все.
Там на пушечный выстрел к боевому серверу не подпускают. Провел тестирование - обновил репозитории. Ведущий разработчик или тостер, как там у кого принято, уже смотрят как работает мое творчество на боевом. Во всяком случае так было в командных проектах с которыми доводилось работать. Сейчас проекты маленького калибра, где даже в SVN нет большой необходимости (ибо 1-3 разработчика задействованы).

Ну ещё, если уже совсем все печально, можете потребовать подписать соглашение о неразглашении и прочие подобные бумажки ваших наймитов будущих Подмигивание

(Отредактировано автором: 09 Октября, 2012 - 13:44:19)

 
 Top
testergame
Отправлено: 09 Октября, 2012 - 13:48:05
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Окт. 2012  


Помог: 0 раз(а)




caballero пишет:
проблемма как я уже намекал исключительно у тебя в голове.

С возрастом и опытом это пройдет.


Я прошу вас очень вежливо не обращаться ко мне в таком тоне.

Еще раз хочу пояснить суть темы:
Цитата:
Какие еще существуют подобные способы организации api кроме http протокола?
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB