On Tuesday Rambler.iOS V which we announced on Habré earlier took place. Experiment with breaking one very large subject on eight reports connected among themselves perfectly took place — thanks to such granulirovannost speakers could concentrate on the aspect of VIPER and prepare really powerful performances.
2 years, 11 months agoThe article "How to Cope with Problems in the Legacy Project after 3 Other Commands" tells what the design team had to pass through that in one and a half years to receive rather stable software product. Here we want to tell, than the command of testing was engaged effectively to check all changes made by developers and to guarantee that the product meets expectations of customers and ultimate users.
2 years, 11 months ago In the previous article I told how the object can simply and reliably bear responsibility for the resources.
But there is a set of options of ownership which are not personal responsibility of object:
Resources which are owned by dependences. When using Dependency Injection the object of a class not only should not be responsible for life cycle of the dependences, it just physically cannot do it: dependence can be separated between several clients, dependence can implement IDisposable, and can not implement, but at the same time it can have dependences and so on. By the way, this argument puts an end to any business interfaces expanding IDisposable at once: such interface demands impossible from the implementations — to be responsible for itself and for that guy (dependences)
Resources which under some conditions should not be cleared. It is, for example, bad habit of StreamReader to close underlying Stream by Dispose challenge
Resources which are external in relation to dependence, but are required for the client in the course of its use. The simplest example — a subscription to object events at assignment to its property.
2 years, 11 months ago
This article does not apply for being the universal recipe, we will try to describe in it those problems which we faced, and their solutions in the project we got which after 3 other commands.
In the beginning we will shortly describe a project essence. There are doctors in clinics which on special devices dictate information on the patient and his visit. Then this information is transferred to a text type (the special division which staff listens is responsible for it and type the text), the text is checked, there is a filling of a template. Then there is a movement on Workflow which includes different stages with different business logic, then there is an integration to several external systems. And, at last, the letter to the patient is printed and sent. And work is archived after a while (but at the same time it can be recovered as necessary).
2 years, 11 months ago
At first everything was simple. Youth, enthusiasm. The project was sawn by several programmers. All incensed, in process of readiness copied a code on the general virtualka, occasionally popinyvat the administrator regarding to deliver some packet or to correct a config. As soon as understood that everything, went to do release. At first backup, brought together then by senior all the steepness in a fist, copied the project on production the server and, with assistance of the administrator, tried to obtain that it earned there. The command waited two days, was convinced that queue with hatchets was not formed of grateful users, and, with a pride for the performed work, went to drink beer.
Then all slightly matured. Appeared and began somehow to be used by redmine/jira/etc, git/svn, jenkins, spinx-docs/rubydoc/doxygen/etc, wiki, unit tests. There were subprojects, the stand grew up. Production of servachok became a little. The administrator lifted salt/puppet/etc, monitoring, sits in the den as a spider, governs configs on salt-master and pulls state.highstate from there.
2 years, 12 months ago
In brief, in this article Liskov, about distinction of the contracts NotifyCollectionChangedAction.Reset in. net Framework versions 4 and. net Framework 4.5, and about what of these two contracts true and what — wrong will be a question of the rule of inheritance.
3 years ago It would seem, this template is not simply simple, and is very simple, in detail sorted not in one famous book. Nevertheless, still even within one project it often can be implemented differently, creating a zoo from bicycles, crutches and leaks. I want to share the method of implementation which is based on minimization of the invention of bicycles, the maximum reduction of quantity of a code and increase in its expressiveness and transparency.
3 years ago
Several times I encountered on the Internet articles about "component-oriented programming" which general idea is in that to represent each difficult object as a set of independent functional blocks — components.
In the theory it sounds very interestingly: all independent, small, difficult objects — only different combinations from simpler. Recently decided to try to write system which will work under such laws, and everything was not so trivial. Behind details I invite under kat.