Вход на сайт
редактирование - merge()... в синглетоне
21.11.12 11:09
Ладышки, возвращаемся к старым баранам...
Когда-то давно Я уже спрашивал, но потом вопрос перестал быть актуальным... Ну а сейчас - снова актуализировался...
Вопросик такой:
В систем есть несколько типов документов.
Нормально документик хранится в файлике и все что надо было делать - прочитать, отпарсить и предоставить доступ к полям.
Потому было сделано простенько - имплементировался синглетон на чтение/парсинг/доступ. Все работает, ошибок почти нет.
Теперь, однако, требуется выполнять редактирование этих документиков.
Пока - простое, в виде слияния двух (требуется ДВА инстанса) однотипных документов, но не исключено что надо будет и что-то большее - вставка текста, обьектов и т.п...
Вот и думаю над тем как лучше с точки зрения архитектуры организовать систему:
- сделать защищенный конструктор в синглетоне и наследовать для редактора
или
- сделать нормальный редактор и уже его ограничить синглетоном там где надо.
Обьем работы - примерно одинаковый, но будут нюансики в имплементации и последующем использовании...
Сижу, думаю...
Когда-то давно Я уже спрашивал, но потом вопрос перестал быть актуальным... Ну а сейчас - снова актуализировался...
Вопросик такой:
В систем есть несколько типов документов.
Нормально документик хранится в файлике и все что надо было делать - прочитать, отпарсить и предоставить доступ к полям.
Потому было сделано простенько - имплементировался синглетон на чтение/парсинг/доступ. Все работает, ошибок почти нет.
Теперь, однако, требуется выполнять редактирование этих документиков.
Пока - простое, в виде слияния двух (требуется ДВА инстанса) однотипных документов, но не исключено что надо будет и что-то большее - вставка текста, обьектов и т.п...
Вот и думаю над тем как лучше с точки зрения архитектуры организовать систему:
- сделать защищенный конструктор в синглетоне и наследовать для редактора
или
- сделать нормальный редактор и уже его ограничить синглетоном там где надо.
Обьем работы - примерно одинаковый, но будут нюансики в имплементации и последующем использовании...
Сижу, думаю...
NEW 21.11.12 22:38
в ответ Murr 21.11.12 11:09
3 раза перечитывал сообщение и три раза не мог понять, о чём оно (:
тоесть у тебя сейчас так:
тоесть у тебя сейчас так:
class Document
{
private Document(){}
public static Instance {get; }
public void Read(Stream from);
public void Parse(string str);
}
ну так сделай так:
class Document
{
private Document(){}
public static Document Read(Stream from);
public static Document Parse(string str);
public static Document Merge(Document doc1, Document doc2);
}
Ты можешь 2 строчки кода, вместо 30 строчек текста привести? :)
NEW 22.11.12 09:31
в ответ Posmotrim 21.11.12 22:38
ну так сделай так:
------
А как оно должно при этом работать? Ты определил статики - т.е. ссылку на обьект надо передавать отдельно...
Ты можешь 2 строчки кода
------
Можно... но часто вырезать две строчки кода - это дольше и гораздо менее продумано...
То, что мне нужно:
- с одной стороны - иметь жесткую гарантию что в системе всего один инстансе обьекта (и фаил читается один раз)
- с другой сторны - что имеется возможность создать другой обьект и выполнить Мерге()...
При этом проблема не столько в имплементации, сколько в том, что сделать надо так, чтобы обезьяна, которая еще толком не освоила операторы, даже при желании не могла написать глупость...
------
А как оно должно при этом работать? Ты определил статики - т.е. ссылку на обьект надо передавать отдельно...
Ты можешь 2 строчки кода
------
Можно... но часто вырезать две строчки кода - это дольше и гораздо менее продумано...
То, что мне нужно:
- с одной стороны - иметь жесткую гарантию что в системе всего один инстансе обьекта (и фаил читается один раз)
- с другой сторны - что имеется возможность создать другой обьект и выполнить Мерге()...
При этом проблема не столько в имплементации, сколько в том, что сделать надо так, чтобы обезьяна, которая еще толком не освоила операторы, даже при желании не могла написать глупость...
NEW 22.11.12 12:27
в ответ Murr 22.11.12 09:31
я бы не стал делать документ синглтоном, а просто бы обеспечил к нему доступ из уже существуюещего синглтона приложения к примеру:
class Application
{
private Application() {throw new NotImplementedException();}
static Application Instance {get {throw new NotImplementedException();}}
public Document ActiveDocument { get; private set; }
public void OpenDocument(Reader from)
{
if(ActiveDocument != null)
ActiveDocument.Close();
ActiveDocument = new Document(from);
}
}
Таким образом, имеем единственный объект документа в приложении(Application).
Теперь рассмотрим класс документа:
class Document
{
public Document(Reader from) { throw new NotImplementedException(); }
//Properties
//...
//Methods
//...
public void Save(Writer to) { throw new NotImplementedException(); }
public void Close() { throw new NotImplementedException(); }
public void MergeWith(Document other){ throw new NotImplementedException(); }
}
NEW 22.11.12 13:29
в ответ Posmotrim 22.11.12 12:27
а просто бы обеспечил к нему доступ из уже существуюещего синглтона
------
А каким образом при этом обеспечить ситуцию при которой обезьяка не сможет испортить исходный документ?
На текущий момент документ просто не имеет Саве()...
По тому подумываю сделать примерно так:
class Document
{
protected Document() {}
private Document(bool inst) {}
public void Load() {}
static Document instance;
public static Document Instance { if(instance == null) instance = Document(true); return instance; }
}
class Document_Editor : Document
{
public Document_Editor : base() {}
public void Save(...) {}
public void Merge(...) {}
}
Что гарантирует защиту он обезьянки, но вводит дополнительный класс...
Либо надо делать что-то совсем заморочное...
------
А каким образом при этом обеспечить ситуцию при которой обезьяка не сможет испортить исходный документ?
На текущий момент документ просто не имеет Саве()...
По тому подумываю сделать примерно так:
class Document
{
protected Document() {}
private Document(bool inst) {}
public void Load() {}
static Document instance;
public static Document Instance { if(instance == null) instance = Document(true); return instance; }
}
class Document_Editor : Document
{
public Document_Editor : base() {}
public void Save(...) {}
public void Merge(...) {}
}
Что гарантирует защиту он обезьянки, но вводит дополнительный класс...
Либо надо делать что-то совсем заморочное...
NEW 22.11.12 13:48
Странная логика - редактор документа наследуется от документа... (:
Ещё раз. Я бы делал так:
Ещё раз. Я бы делал так:
У приложения есть редактор документов - одна штука. (агрегация)
Редактор документов умеет редактировать один документ. (агрегация)
Документ умеет считываться с диска. (операция документа)
Документ умеет записываться на диск. (операция документа)
Ты хочешь сделать следующее:
Приложение должно уметь мёрджить два документа,
но в приложении есть всего один документ.
Далее: если макака может испортить файл документа операцией Save, то почему она не может испортить этот файл используя System.IO.DeleteFile?
NEW 22.11.12 14:09
в ответ Posmotrim 22.11.12 13:48
Далее: если макака может испортить файл документа операцией Save, то почему она не может испортить этот файл используя System.IO.DeleteFile?
-----
Разумеется - сможет. Но за это ей сделают "больно"... так же как и за "Формат С:"
Вопрос ставится только об том. чтобы доступные методы не позволили сделать неправильную операцию.
Ты хочешь сделать следующее:
------
Ну наконец-то - об этом и идет речь с первого поста...
Документ умеет записываться на диск. (операция документа)
------
Не могу разрешить документу быть записываемым или даже редактируемым вне редактора. Вопрос не в том чтобы разрешить это документу, а в том какую архитектуры выбрать чтобы это обеспечить... и чтобы потом не переделывать несколько раз код при изменении требований.
-----
Разумеется - сможет. Но за это ей сделают "больно"... так же как и за "Формат С:"
Вопрос ставится только об том. чтобы доступные методы не позволили сделать неправильную операцию.
Ты хочешь сделать следующее:
------
Ну наконец-то - об этом и идет речь с первого поста...
Документ умеет записываться на диск. (операция документа)
------
Не могу разрешить документу быть записываемым или даже редактируемым вне редактора. Вопрос не в том чтобы разрешить это документу, а в том какую архитектуры выбрать чтобы это обеспечить... и чтобы потом не переделывать несколько раз код при изменении требований.
NEW 22.11.12 14:53
в ответ Murr 22.11.12 14:13
Я так понимаю, что у тебя там несколько разных типом документов...
т.е.
class Document
{
}
class Document_A : Document
{
}
class Document_B : Document
{
}
итд.
может быть тебе тогда сделать мультидокументный синглтон? :)
class Document
{
private static Dictionary <Type, Document> _docs = new Dictionary <Type, Document> ();
private static Document GetDocumentByType (Type type)
{
}
дальше сам :)
}
т.е.
class Document
{
}
class Document_A : Document
{
}
class Document_B : Document
{
}
итд.
может быть тебе тогда сделать мультидокументный синглтон? :)
class Document
{
private static Dictionary <Type, Document> _docs = new Dictionary <Type, Document> ();
private static Document GetDocumentByType (Type type)
{
}
дальше сам :)
}
NEW 22.11.12 15:13
в ответ Программист 22.11.12 14:53
может быть тебе тогда сделать мультидокументный синглтон? :)
-----
Хммм... Не вижу пользы. Потому как документы не заменяемые... т.е. 10 разных документов - 10 разных классов... плюс - редакторы для тех, для которых нужно.
Сделать Фабрику Документов?.. но она не нужна - по задаче, исключая редактирование, остается именно синлетон определенного типа.
-----
Хммм... Не вижу пользы. Потому как документы не заменяемые... т.е. 10 разных документов - 10 разных классов... плюс - редакторы для тех, для которых нужно.
Сделать Фабрику Документов?.. но она не нужна - по задаче, исключая редактирование, остается именно синлетон определенного типа.
NEW 22.11.12 16:05
в ответ Murr 22.11.12 14:09
ну так отдели мух от котлет:
interface IDocument
{
//свойства и методы, которые макаке можно вызывать
}
interface IPersistent
{
void Write(Stream s);
void Read(Stream s);
}
class Application
{
private Application() {throw new NotImplementedException();}
static Application Instance {get {throw new NotImplementedException();}}
public IDocument ActiveDocument { get { return doc; } }
public void OpenDocument(Stream from)
{
doc = new Document(from);
}
private Document doc;
}
class Document : IDocument, IPersistent
{
//...
}
NEW 22.11.12 16:53
Примерно так и думаю...
interface IEditor
{
void Merge(object o);
void Save();
}
interface IEditable
{
IEditor GetEditor();
}
public class Document : IEditable
{
Document() {}
protected Document(IEditable) {}
public void Load();
private static Document instance;
public static Document Instance { ... }
}
internal class DocumentEditor : Document, IEditor
{
protected DocumentEditor() : base(Document.Instance) { }
}
ну так отдели мух от котлет:
------
Ты, видимо, не работал с молодыми индусами... они могут работать с инстансом... но если им сказать, что можно кастить к интерфейсу, то придется каждый день обьяснять почему к одному интерфейсу - можно, а к другому - нельзя...
Индуска... работает 6-й месяц... якобы имеет 3 года опыта с Плюсами... неделю назад ей обясняли, что файл документа (в хмл-формате и уже кешированный в системе) не надо читать через ФилеСтреам... даже если она добавила к нему целую секцию... до уровня того, что после обновления формата файла надо подогнать и ИО в остальном коде ее еще тащить и тащить...
interface IEditor
{
void Merge(object o);
void Save();
}
interface IEditable
{
IEditor GetEditor();
}
public class Document : IEditable
{
Document() {}
protected Document(IEditable) {}
public void Load();
private static Document instance;
public static Document Instance { ... }
}
internal class DocumentEditor : Document, IEditor
{
protected DocumentEditor() : base(Document.Instance) { }
}
ну так отдели мух от котлет:
------
Ты, видимо, не работал с молодыми индусами... они могут работать с инстансом... но если им сказать, что можно кастить к интерфейсу, то придется каждый день обьяснять почему к одному интерфейсу - можно, а к другому - нельзя...
Индуска... работает 6-й месяц... якобы имеет 3 года опыта с Плюсами... неделю назад ей обясняли, что файл документа (в хмл-формате и уже кешированный в системе) не надо читать через ФилеСтреам... даже если она добавила к нему целую секцию... до уровня того, что после обновления формата файла надо подогнать и ИО в остальном коде ее еще тащить и тащить...
NEW 22.11.12 20:57
Для повторного использования реализации в шарпе существует аггрегация.
-----
Агрегация - это хорошо...
Теперь берем документ типа "конфиг" и смотрим на 200-300 свойств конфигурации... а завтра - добавят еще с десяток... и все ето надо поддерживать... а так - агрегация - это хорошо...
Тут очень важно, чтобы свойство Instance имело тип IEditable, а не Document.
------
Должно кастится автоматически... ну если заупрямится - можно и принудительно... Одна точка - не проблема.
-----
Агрегация - это хорошо...
Теперь берем документ типа "конфиг" и смотрим на 200-300 свойств конфигурации... а завтра - добавят еще с десяток... и все ето надо поддерживать... а так - агрегация - это хорошо...
Тут очень важно, чтобы свойство Instance имело тип IEditable, а не Document.
------
Должно кастится автоматически... ну если заупрямится - можно и принудительно... Одна точка - не проблема.
NEW 22.11.12 21:11
в ответ AlexNek 22.11.12 19:29
Но чувствую, что новый бардак 
-----
Ну так у меня другого и не бывает...
Ты можешь индусам только либу выдать?
-----
Если бы... Даже если перенесу все в либу - им все одно будут давать править ее код...
Так что мне надо придумать конструктив, который обеспечит отсутствие глупостей в большинстве случаев. Ну и минимальные усилия по поддержке...
Так что думаю в сторону возможности получить интерфейс редактора он инстанса... но без возможности инстанцировать редактор самостоятельно... как-то так...

-----
Ну так у меня другого и не бывает...

Ты можешь индусам только либу выдать?
-----
Если бы... Даже если перенесу все в либу - им все одно будут давать править ее код...

Так что мне надо придумать конструктив, который обеспечит отсутствие глупостей в большинстве случаев. Ну и минимальные усилия по поддержке...
Так что думаю в сторону возможности получить интерфейс редактора он инстанса... но без возможности инстанцировать редактор самостоятельно... как-то так...
NEW 22.11.12 21:24
в ответ Murr 22.11.12 21:11
А как тогда запретить копаться в твоем классе?
Но если прицепить к нему линейку которая будет по рукам бить
То тогда можно спрятать класс как приватный.
У меня еще есть генерик синглетон, хотя у него правда проблема, что от него можно наследоваться, но решается "административными" методами.
Но если прицепить к нему линейку которая будет по рукам бить

То тогда можно спрятать класс как приватный.
У меня еще есть генерик синглетон, хотя у него правда проблема, что от него можно наследоваться, но решается "административными" методами.
NEW 22.11.12 22:21
в ответ AlexNek 22.11.12 21:24
решается "административными" методами.
------
В моем случае - без толку...
Вот сегодня.
Срочно! Прямо сейчас!!! Все бросай и занимайся ЭТИМ!!!
Ковыряю... в требованиях (и написанном коде) было учтено, что из шести возможных комбинаций значений будут использоваться только четыре... в измененном коде - задействован пятый вариант... при етом задействован, по традиции, без проверки "а как оно будет работать?" ну и где-то бог знает где не сгенерился какой-то див и панель "уехала"... Кода при этом добавили строк 100-150 - как оно должно быть уже и непоймешь... даже при том, что Я потратил более двух недель на очистку и делание понйтхым этого кода...
Починка. Написал "по месту" проверку всех 6 комбинаций, добавил индикацию "вне всех условий" и... поправил _только_ пятую. С остальным пусть кто-нибудь разбирается...
По твоей ситуации - попробуй static readonly для хранения...
------
В моем случае - без толку...
Вот сегодня.
Срочно! Прямо сейчас!!! Все бросай и занимайся ЭТИМ!!!
Ковыряю... в требованиях (и написанном коде) было учтено, что из шести возможных комбинаций значений будут использоваться только четыре... в измененном коде - задействован пятый вариант... при етом задействован, по традиции, без проверки "а как оно будет работать?" ну и где-то бог знает где не сгенерился какой-то див и панель "уехала"... Кода при этом добавили строк 100-150 - как оно должно быть уже и непоймешь... даже при том, что Я потратил более двух недель на очистку и делание понйтхым этого кода...
Починка. Написал "по месту" проверку всех 6 комбинаций, добавил индикацию "вне всех условий" и... поправил _только_ пятую. С остальным пусть кто-нибудь разбирается...
По твоей ситуации - попробуй static readonly для хранения...
NEW 22.11.12 22:25
Что то пока не вижу в форуме этого ответа..
А откуда ты это взял, что будет все время истина?
Не поленился, запустил - работает именно как ожидалось
Правда конструктор, компайлер все же исправил
в ответ Murr 22.11.12 21:11
В ответ на:
bool q = (c1 == c2); - always TRUE...
bool q = (c1 == c2); - always TRUE...
Что то пока не вижу в форуме этого ответа..
А откуда ты это взял, что будет все время истина?
Не поленился, запустил - работает именно как ожидалось
Правда конструктор, компайлер все же исправил
В ответ на:
.method private hidebysig specialname rtspecialname static void .cctor() cil managed
{
.maxstack 8
L_0000: ldstr "value"
L_0005: stsfld string Test.A::a
L_000a: nop
L_000b: nop
L_000c: ret
}
.method private hidebysig specialname rtspecialname static void .cctor() cil managed
{
.maxstack 8
L_0000: ldstr "value"
L_0005: stsfld string Test.A::a
L_000a: nop
L_000b: nop
L_000c: ret
}
NEW 22.11.12 22:41
в ответ Murr 22.11.12 20:57
В ответ на:
Агрегация - это хорошо...
Теперь берем документ типа "конфиг" и смотрим на 200-300 свойств конфигурации... а завтра - добавят еще с десяток... и все ето надо поддерживать... а так - агрегация - это хорошо...
Агрегация - это хорошо...
Теперь берем документ типа "конфиг" и смотрим на 200-300 свойств конфигурации... а завтра - добавят еще с десяток... и все ето надо поддерживать... а так - агрегация - это хорошо...
interface IDocument
{
//200-300 свойств
//...
}
interface IDocEditor
{
IDocument Document {get; }
}
какая разница классу, реализующему IDocEditor, сколько полей в IDocument?
NEW 22.11.12 22:48
Это "некрасиво". А ситуации у меня нет, кто пытался пользовать неправильно - провели политико воспитательную работу. Это я скорее для тебя написал.
Просто генерик нельзя сделать sealed.
Знакомая ситуация - первый индикатор бардака на фирме :)
У нас правда сейчас другая крайность. Без бумажки ничего нельзя ни править в коде, не делать нового.
Вот сейчас пришло "описание требований" на новую часть софта, так нужно сидеть и ждать пока не будет готово ТЗ по ним.
"Улучшать" старое тоже нельзя - это запланировано через Х месяцев. Хотя это хоть как то можно понять, потому как не считая автоматических тестов, на ручное конечное тестирование нужно около недели.
в ответ Murr 22.11.12 22:21
В ответ на:
По твоей ситуации - попробуй static readonly для хранения
По твоей ситуации - попробуй static readonly для хранения
Это "некрасиво". А ситуации у меня нет, кто пытался пользовать неправильно - провели политико воспитательную работу. Это я скорее для тебя написал.
Просто генерик нельзя сделать sealed.
В ответ на:
Срочно! Прямо сейчас!!! Все бросай и занимайся ЭТИМ!!!
Срочно! Прямо сейчас!!! Все бросай и занимайся ЭТИМ!!!
Знакомая ситуация - первый индикатор бардака на фирме :)
У нас правда сейчас другая крайность. Без бумажки ничего нельзя ни править в коде, не делать нового.
Вот сейчас пришло "описание требований" на новую часть софта, так нужно сидеть и ждать пока не будет готово ТЗ по ним.
"Улучшать" старое тоже нельзя - это запланировано через Х месяцев. Хотя это хоть как то можно понять, потому как не считая автоматических тестов, на ручное конечное тестирование нужно около недели.
NEW 22.11.12 23:36
в ответ AlexNek 22.11.12 22:48
первый индикатор бардака на фирме :)
------
Хорошо что есть бардак - без него для меня вообще бы работы не было...
ни править в коде, не делать нового.
------
Это редактирование должно было быть сделано, вместе с другими прибамбасами, за 4 недели... Вторую неделю жду когда шеф проверит первую часть - импорт фрагментов из стороннего проэкта и даст добро на вторую - экспорт в третий, где и нужно редатирование-слияние... При этом регулярно спрашивается - чем ты занимался весь день? Каков прогресс?
на ручное конечное тестирование нужно около недели.
------
Счасливчики... Я вот очень хочу иметь тестовую систему, которая сможет проверить хотя бы критическую часть комбинаций параметров... и даже это, на автомате, займет несколько месяцев... а доказательной части просто нет.
------
Хорошо что есть бардак - без него для меня вообще бы работы не было...

ни править в коде, не делать нового.
------
Это редактирование должно было быть сделано, вместе с другими прибамбасами, за 4 недели... Вторую неделю жду когда шеф проверит первую часть - импорт фрагментов из стороннего проэкта и даст добро на вторую - экспорт в третий, где и нужно редатирование-слияние... При этом регулярно спрашивается - чем ты занимался весь день? Каков прогресс?
на ручное конечное тестирование нужно около недели.
------
Счасливчики... Я вот очень хочу иметь тестовую систему, которая сможет проверить хотя бы критическую часть комбинаций параметров... и даже это, на автомате, займет несколько месяцев... а доказательной части просто нет.
NEW 22.11.12 23:56
нашел бы еще лучше...
А что отвечают если сказать - ждал вашего ответа.
Проверь тогда самый крититические комбинации в самых критических частях :)
Я уж не знаю сколько у нас исходных тестов NUnit-a, но CI пишет около 30 тыс. - занимает около четверти часа серверного времени. Считаем сотня тысяч на час.
Миллион тестов на "ночной билд" вполне должно хватить. Нужен только человек, который этим специально займется.
в ответ Murr 22.11.12 23:36
В ответ на:
без него для меня вообще бы работы не было...
без него для меня вообще бы работы не было...
нашел бы еще лучше...
В ответ на:
При этом регулярно спрашивается - чем ты занимался весь день?
При этом регулярно спрашивается - чем ты занимался весь день?
А что отвечают если сказать - ждал вашего ответа.
В ответ на:
которая сможет проверить хотя бы критическую часть комбинаций
которая сможет проверить хотя бы критическую часть комбинаций
Проверь тогда самый крититические комбинации в самых критических частях :)
Я уж не знаю сколько у нас исходных тестов NUnit-a, но CI пишет около 30 тыс. - занимает около четверти часа серверного времени. Считаем сотня тысяч на час.
Миллион тестов на "ночной билд" вполне должно хватить. Нужен только человек, который этим специально займется.
NEW 23.11.12 00:43
в ответ AlexNek 22.11.12 23:24
Возьми просто попробуй на компе.
------
Когда чего-нибудь заглючит - посмотрю... а так... у меня вчера вместо работы было сплошное ожидание... что-то поменялось... в исходной базе... или конфигурации проэкта... или еще где-то... и начало расти время поиска места добавления элемента... квадратично так расти... вместо обычного 10-20 вставок за секунду - 10-20 секунд на одну... ну оно и понятно - там перебор все-против-всех... подумал, повертел... сделал мультитиповой индекс... а он - не пошел... где-то в недрах все конвертится в базовый тип... а может так и должно было быть... и не хочет обратно... буду в понедельник разбираться...
------
Когда чего-нибудь заглючит - посмотрю... а так... у меня вчера вместо работы было сплошное ожидание... что-то поменялось... в исходной базе... или конфигурации проэкта... или еще где-то... и начало расти время поиска места добавления элемента... квадратично так расти... вместо обычного 10-20 вставок за секунду - 10-20 секунд на одну... ну оно и понятно - там перебор все-против-всех... подумал, повертел... сделал мультитиповой индекс... а он - не пошел... где-то в недрах все конвертится в базовый тип... а может так и должно было быть... и не хочет обратно... буду в понедельник разбираться...
NEW 23.11.12 00:55
в ответ AlexNek 22.11.12 23:56
А что отвечают если сказать - ждал вашего ответа.
-----
поинтересуюсь на досуге...
Проверь тогда самый крититические комбинации в самых критических частях :)
------
Угу... осталось их выяснить какие из них какие... там под 1000 шаблонов... даже по одному из них невозможно сказать что будет в нем использоваться...
100 лет говорю, что надо сделать хотя бы элементарное - исходную базу, имеющую все типы полей и связей... и хоть как-то проверять с нее выход перед релизом системы...
Пустое... Да-да, надо бы сделать... вот это закончим... ой, бля, все бросай и ЭТИМ занимайся...
-----
поинтересуюсь на досуге...
Проверь тогда самый крититические комбинации в самых критических частях :)
------
Угу... осталось их выяснить какие из них какие... там под 1000 шаблонов... даже по одному из них невозможно сказать что будет в нем использоваться...
100 лет говорю, что надо сделать хотя бы элементарное - исходную базу, имеющую все типы полей и связей... и хоть как-то проверять с нее выход перед релизом системы...
Пустое... Да-да, надо бы сделать... вот это закончим... ой, бля, все бросай и ЭТИМ занимайся...
NEW 23.11.12 18:25
ну если скелет фиговый был и море людей дописывало что нужно было "немедленно", то ожидать чего хорошего не приходится.
Но если качество и дальнейшая поддержка не очень интересует начальство, то когда то наступит время когда новых ошибок будет больше чем ты будешь в состоянии их исправить.
А что нельзя кого то взять на саппорт, пока ты все с нуля не напишешь?
в ответ Murr 23.11.12 00:47
В ответ на:
6 лет используется код
6 лет используется код
ну если скелет фиговый был и море людей дописывало что нужно было "немедленно", то ожидать чего хорошего не приходится.
Но если качество и дальнейшая поддержка не очень интересует начальство, то когда то наступит время когда новых ошибок будет больше чем ты будешь в состоянии их исправить.
А что нельзя кого то взять на саппорт, пока ты все с нуля не напишешь?
NEW 23.11.12 20:19
в ответ Murr 21.11.12 11:09
NEW 28.11.12 11:58
в ответ Murr 22.11.12 23:20
Подумал.
Все же придется наследоваться.
У меня там мелкие неприятности с акселерирующими индексами, которые очень не хочется делать Паблик, а при внешнем редакторе не будет возможности с ними работать. Разница по быстродействию чуствительна.
Так что имплементируется версия Адд() & АддРанге() как Мерге(Итем) & Мерге(Итем[])...
Все же придется наследоваться.
У меня там мелкие неприятности с акселерирующими индексами, которые очень не хочется делать Паблик, а при внешнем редакторе не будет возможности с ними работать. Разница по быстродействию чуствительна.
Так что имплементируется версия Адд() & АддРанге() как Мерге(Итем) & Мерге(Итем[])...
NEW 28.11.12 12:10
в ответ AlexNek 23.11.12 18:25
А что нельзя кого то взять на саппорт, пока ты все с нуля не напишешь?
------
Не знаю. Не знаю каково финансовое положение компании. Мне дали столько сколько Я запросил и нагружают только разработкой - Я этим доволен. Суппорт - есть дочерняя компания... но они занимаются только поддержкой клиентских задач... по самой разработке суппорт, как таковой, абсолютно бесполезен в силу специфики задачи...
наступит время когда новых ошибок будет больше чем
------
Их уже больше. Где-то лет 5-6...
Но проект пока живет... 
Я, кстати, перестал тужится на исправление ошибок. Т.е. - будет ошибка и будет на нее выделено время - буду смотреть и править... При этом править буду только "правильно", невзирая на затрачиваемое время... как показала практика буквально последних дней - данная тактика в данных условиях себя оправдывает.
------
Не знаю. Не знаю каково финансовое положение компании. Мне дали столько сколько Я запросил и нагружают только разработкой - Я этим доволен. Суппорт - есть дочерняя компания... но они занимаются только поддержкой клиентских задач... по самой разработке суппорт, как таковой, абсолютно бесполезен в силу специфики задачи...
наступит время когда новых ошибок будет больше чем
------
Их уже больше. Где-то лет 5-6...


Я, кстати, перестал тужится на исправление ошибок. Т.е. - будет ошибка и будет на нее выделено время - буду смотреть и править... При этом править буду только "правильно", невзирая на затрачиваемое время... как показала практика буквально последних дней - данная тактика в данных условиях себя оправдывает.
NEW 28.11.12 22:27
Или у нас разные понятия о разработке или ты многое недоговариваешь. Хотя это абсолютно неважно если ты доволен.
Кстати под суппортом я имел в виду что пока ты будешь полностью занят разработкой нового, кто то другой будет поддерживает работоспособность старого.
ну значит еще все не так страшно как описывается. Контроллировать проект то еще можно?
Буквально вчера, на семинаре, Ralf Westfal весьма рекомендовал использовать триаж для программирования также.
http://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D0%B4%D0%B8%D1%86%D0%B8%D0%BD%D1%81%D0...
Вроде это как раз твой случай.
В ответ на:
и нагружают только разработкой
и нагружают только разработкой
Или у нас разные понятия о разработке или ты многое недоговариваешь. Хотя это абсолютно неважно если ты доволен.
Кстати под суппортом я имел в виду что пока ты будешь полностью занят разработкой нового, кто то другой будет поддерживает работоспособность старого.
В ответ на:
Но проект пока живет...
Но проект пока живет...
ну значит еще все не так страшно как описывается. Контроллировать проект то еще можно?
В ответ на:
буду смотреть и править...
буду смотреть и править...
Буквально вчера, на семинаре, Ralf Westfal весьма рекомендовал использовать триаж для программирования также.
http://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D0%B4%D0%B8%D1%86%D0%B8%D0%BD%D1%81%D0...
Вроде это как раз твой случай.
NEW 29.11.12 10:32
в ответ AlexNek 28.11.12 22:27
кто то другой будет поддерживает работоспособность старого.
------
"Старое", т.е. очередной релиз, поддерживать не требуется. Обычно все "работает"... если не работает - где-то что-то нахомутали в ручном редактировании конфигов, таблиц трансляции или еще чего-то такого же... Так что суть фиксинга - прибить баг и сделать новый релиз... иногда их по 3-5 штук в день...
Вроде это как раз твой случай.
------
Угу... Мало того - примерно так и решается... Только вот проблемка в том, что "пациент" уж сильно запущенный... ну а его еще и на тяжелых работах без кормежки пользуют...
Контроллировать проект то еще можно?
-----
Практически - нет. Т.е. даже зная что надо сделать Я не могу дать сколь-нибудь надежную оценку/прогноз времени решения проблемы. Шеф - тоже не может. Про остальных данный вопрос вообще не стоит...
------
"Старое", т.е. очередной релиз, поддерживать не требуется. Обычно все "работает"... если не работает - где-то что-то нахомутали в ручном редактировании конфигов, таблиц трансляции или еще чего-то такого же... Так что суть фиксинга - прибить баг и сделать новый релиз... иногда их по 3-5 штук в день...

Вроде это как раз твой случай.
------
Угу... Мало того - примерно так и решается... Только вот проблемка в том, что "пациент" уж сильно запущенный... ну а его еще и на тяжелых работах без кормежки пользуют...
Контроллировать проект то еще можно?
-----
Практически - нет. Т.е. даже зная что надо сделать Я не могу дать сколь-нибудь надежную оценку/прогноз времени решения проблемы. Шеф - тоже не может. Про остальных данный вопрос вообще не стоит...
NEW 29.11.12 22:59
в ответ AlexNek 29.11.12 20:46
А что с архитектурой приложения?
------
В какой части?
В генераторе - там сам черт ногу сломит... хвосты 30-40 разных идей... часть - частично имплементирована, часть - уже не используется, но болтается - вырезать - практически невозможно...
В генерируемом коде - там тоже есть проблемы... и они тоже наслоенные... АСПХ, активно использующий веб-сервисы, но не перешедший на них полностью... сейчас индийка аккурат делает ресаизе для контролов с записью нового размера в базу... через сервисе... потом надо будет это же вырезать из кода страницы... что-то - вырежут, что-то - останется... как обычно.
Если и она отвратительная, то нужно обязательно что то делать.
------
Невозможно.
Вчера "нашелся" еще один документик... Начал делать его представление... и полный стоп - это НЕ НУЖНО... где-то там что-то уже написано и работает "как надо"... Про то, что надо сделать обертку и изолировать фактический источник информации от используемого представления - и слышать не хотят... Ну а в существующем коде разобраться почти невозможно - одну "простую" функцию можо разобрать на пяток классов с десятком функций... но пока поимешь что там наверчено... ой... и каждый день что-то новое поверх... без продумывания деталей...
Может набрать команду, которая под твоим руководством будет с нуля все делать?
------
А кто платить будет? Контора еле-еле на плаву... Аккурат сегодня шефа спросил - как? - и никаких прогнозов...
А сегодня вообще было класно - время - 17:17 - нашелся баг... причем такой, что должен был быть найден еще на прошлой неделе... где-то в моем коде... даже, кажется, знаю где - там составной документ и похоже что части не загружаются до построения индекса - и индекс получается битый... ну и соответственно индексу "правятся" все ошибки... правятся, надо сказать, - правильно - генерируемое приложение - работает... и все - "горит" - клиенту надо показывать... вчера... вот завтра с утра и буду этим заниматься... больше все одно некому...
------
В какой части?
В генераторе - там сам черт ногу сломит... хвосты 30-40 разных идей... часть - частично имплементирована, часть - уже не используется, но болтается - вырезать - практически невозможно...
В генерируемом коде - там тоже есть проблемы... и они тоже наслоенные... АСПХ, активно использующий веб-сервисы, но не перешедший на них полностью... сейчас индийка аккурат делает ресаизе для контролов с записью нового размера в базу... через сервисе... потом надо будет это же вырезать из кода страницы... что-то - вырежут, что-то - останется... как обычно.
Если и она отвратительная, то нужно обязательно что то делать.
------
Невозможно.
Вчера "нашелся" еще один документик... Начал делать его представление... и полный стоп - это НЕ НУЖНО... где-то там что-то уже написано и работает "как надо"... Про то, что надо сделать обертку и изолировать фактический источник информации от используемого представления - и слышать не хотят... Ну а в существующем коде разобраться почти невозможно - одну "простую" функцию можо разобрать на пяток классов с десятком функций... но пока поимешь что там наверчено... ой... и каждый день что-то новое поверх... без продумывания деталей...
Может набрать команду, которая под твоим руководством будет с нуля все делать?
------
А кто платить будет? Контора еле-еле на плаву... Аккурат сегодня шефа спросил - как? - и никаких прогнозов...
А сегодня вообще было класно - время - 17:17 - нашелся баг... причем такой, что должен был быть найден еще на прошлой неделе... где-то в моем коде... даже, кажется, знаю где - там составной документ и похоже что части не загружаются до построения индекса - и индекс получается битый... ну и соответственно индексу "правятся" все ошибки... правятся, надо сказать, - правильно - генерируемое приложение - работает... и все - "горит" - клиенту надо показывать... вчера... вот завтра с утра и буду этим заниматься... больше все одно некому...