1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[82],{9995:function(e,n,t){"use strict";t.r(n),t.d(n,{default:function(){return MDXContent},meta:function(){return o}});var r=t(9499),i=t(5893),s=t(1151),c=t(1214);function ownKeys(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter(function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable})),t.push.apply(t,r)}return t}function _objectSpread(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?ownKeys(Object(t),!0).forEach(function(n){(0,r.Z)(e,n,t[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})}return e}var o={title:"OCP | ÐгÑаниÑÐµÐ½Ð¸Ñ Ð¸ подводнÑе камни",description:"ÐгÑаниÑÐµÐ½Ð¸Ñ Ð¿ÑинÑипа оÑкÑÑÑоÑÑи-закÑÑÑоÑÑи, Ñ ÐºÐ¾ÑоÑÑми ÑазÑабоÑÑики ÑÑалкиваÑÑÑÑ ÑаÑе вÑего"},MDXLayout=function(e){var n=e.children;return(0,i.jsx)(c.Z,{meta:o,children:n})};function _createMdxContent(e){var n=_objectSpread(_objectSpread({a:"a",h1:"h1",h2:"h2",li:"li",p:"p",section:"section",ul:"ul"},(0,s.a)()),e.components);return(0,i.jsxs)(n.section,{children:[(0,i.jsx)(n.h1,{children:"ÐгÑаниÑÐµÐ½Ð¸Ñ Ð¸ подводнÑе камни"}),(0,i.jsx)(n.p,{children:"У каждого пÑинÑипа еÑÑÑ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ Ð¸ облаÑÑÑ Ð¿ÑименениÑ. ÐÐ»Ñ OCP Ñ Ð°ÑакÑеÑÐ½Ñ ÑледÑÑÑие огÑаниÑÐµÐ½Ð¸Ñ Ð¸ подводнÑе камни."}),(0,i.jsxs)(n.section,{children:[(0,i.jsx)(n.h2,{children:"СиÑÑема не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð·Ð°ÐºÑÑÑа на 100%"}),(0,i.jsx)(n.p,{children:"ÐÑегда еÑÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ, коÑоÑÑе невозможно внеÑÑи, не изменив код какого-Ñо модÑлÑ, поÑÑÐ¾Ð¼Ñ Ð¿Ñи пÑоекÑиÑовании важен ÑÑÑаÑегиÑеÑкий Ð¿Ð¾Ð´Ñ Ð¾Ð´. ÐÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ опÑеделиÑÑ, Ð¾Ñ ÐºÐ°ÐºÐ¸Ñ Ð¸Ð¼ÐµÐ½Ð½Ð¾ изменений и какие именно модÑли Ð²Ñ Ñ Ð¾ÑиÑе закÑÑÑÑ."}),(0,i.jsx)(n.p,{children:"СледÑÐµÑ ÑÑиÑÑваÑÑ, ÑÑо лÑди оÑÐµÐ½Ñ Ð¿Ð»Ð¾Ñ Ð¾ ÑмеÑÑ Ð¿ÑогнозиÑоваÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ. Ðаже Ð¸Ð¼ÐµÑ Ð´Ð¾ÑÑаÑоÑно знаний о ÑиÑÑеме и опÑÑа, пÑоекÑиÑовÑики не могÑÑ Ð±ÑÑÑ ÑвеÑенÑ, ÑÑо пÑедÑÑмоÑÑели вÑе возможнÑе ваÑианÑÑ ÑазвиÑÐ¸Ñ ÑиÑÑемÑ."}),(0,i.jsxs)(n.p,{children:["OCP пÑÐµÐ´Ð»Ð°Ð³Ð°ÐµÑ Ð¿Ð¾Ð´Ñ Ð¾Ð´ ",(0,i.jsx)(n.a,{href:"https://agiledesign.org/2015/01/18/jit-just-in-time-and-software-development/",children:"Just-in-time design"}),", пÑи коÑоÑом новÑе ÑÑÑноÑÑи добавлÑÑÑÑÑ Ð² ÑиÑÑÐµÐ¼Ñ Ð¿Ð¾ меÑе Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑи, но не ÑанÑÑе. ÐÑо Ñем-Ñо Ð¿Ð¾Ñ Ð¾Ð¶Ðµ на оÑказ Ð¾Ñ Ñанней опÑимизаÑии и ",(0,i.jsx)(n.a,{href:"http://tonsky.me/blog/concrete-vs-abstract/",children:"Ñаннего Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð°Ð±ÑÑÑакÑий"}),"."]}),(0,i.jsx)(n.p,{children:"Ð¦ÐµÐ»Ñ Ð¿Ð¾Ð´Ñ Ð¾Ð´Ð° в Ñом, ÑÑÐ¾Ð±Ñ Ð½Ðµ ÑоздаваÑÑ Ð°Ð±ÑÑÑакÑии на пÑÑÑом меÑÑе. Ðдин из кÑиÑеÑиев Ñ Ð¾ÑоÑего дизайна â пÑоÑÑоÑа, поÑÑÐ¾Ð¼Ñ Ð¸ÑполÑзоваÑÑ OCP ÑледÑÐµÑ Ð²Ñегда Ñ Ð¾Ð³Ð»Ñдкой на Ñо, наÑколÑко ÑиÑÑема полÑÑиÑÑÑ Ð¿ÑоÑÑой в иÑоге."})]}),(0,i.jsxs)(n.section,{children:[(0,i.jsx)(n.h2,{children:"ÐолÑÑое колиÑеÑÑво ÑÑÑноÑÑей"}),(0,i.jsxs)(n.p,{children:["Ðобавление ÑÑнкÑионалÑноÑÑи менее ÑиÑкованно, Ñем изменение ÑÑÑеÑÑвÑÑÑей, но взамен Ð¼Ñ ÑиÑкÑем ",(0,i.jsx)(n.a,{href:"https://softwareengineering.stackexchange.com/questions/170547/refactoring-and-open-closed-principle",children:"ÑвелиÑиÑÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво ÑÑÑноÑÑей"}),". ÐеÑконÑÑолÑное и бездÑмное Ñледование OCP Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑиводиÑÑ Ðº ÑиÑÑаÑиÑм, когда инÑеÑÑейÑов ÑÑÐ°Ð½ÐµÑ ÑлиÑком много, а ÑÑнкÑионалÑноÑÑÑ â ÑÑÐ°Ð½ÐµÑ ÑаздÑобленной."]}),(0,i.jsxs)(n.p,{children:["ХоÑоÑий дизайн ÑиÑÑÐµÐ¼Ñ â ÑÑо в пеÑвÑÑ Ð¾ÑеÑÐµÐ´Ñ Ð¿ÑоÑÑой дизайн. Чем менÑÑе ÑÑÑноÑÑей Ð¼Ñ ÑоздаÑм Ð´Ð»Ñ ÑеÑÐµÐ½Ð¸Ñ Ð¿ÑоблемÑ, Ñем ",(0,i.jsx)(n.a,{href:"https://ru.wikipedia.org/wiki/%D0%94%D0%B7%D0%B5%D0%BD_%D0%9F%D0%B8%D1%82%D0%BE%D0%BD%D0%B0",children:"вÑÑе веÑоÑÑноÑÑÑ, ÑÑо дизайн Ñ Ð¾ÑоÑий"}),", поÑÑÐ¾Ð¼Ñ ÑледоваÑÑ OCP Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ Ñ Ð¾ÑÑоÑожноÑÑÑÑ."]})]}),(0,i.jsxs)(n.section,{children:[(0,i.jsx)(n.h2,{children:"ÐÐ¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½Ðµ нÑжен Ð´Ð»Ñ Ð¼Ð°Ð»ÐµÐ½ÑÐºÐ¸Ñ Ð¿Ñиложений"}),(0,i.jsx)(n.p,{children:"OCP наÑелен на бÑÑÑÑое и деÑÑвое добавление ÑÑнкÑионалÑноÑÑи и маÑÑÑабиÑование ÑиÑÑемÑ. Ðн окÑпаеÑÑÑ, еÑли ÑиÑÑема дейÑÑвиÑелÑно болÑÑаÑ, и пÑовеÑÑÑÑ, как повлиÑло изменение кода, оÑÐµÐ½Ñ Ð´Ð¾Ñого или долго (или невозможно)."}),(0,i.jsxs)(n.p,{children:["ÐÑли же пÑиложение маленÑкое, Ñо OCP Ð¼Ð¾Ð¶ÐµÑ ",(0,i.jsx)(n.a,{href:"https://www.tonymarston.net/php-mysql/not-so-solid-oo-principles.html",children:"пÑевÑаÑиÑÑÑÑ Ð² пÑинÑип Ñади пÑинÑипа"})," â когда ÑазÑабоÑÑики бÑдÑÑ Ð¿Ð¸ÑаÑÑ Ð±Ð¾Ð¹Ð»ÐµÑплейÑ-код Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð½Ð¾Ð²ÑÑ ÑÑÑноÑÑей без видимой и оÑÑÑимой полÑзÑ."]}),(0,i.jsx)(n.p,{children:"OCP ÑледÑÐµÑ Ð¿ÑименÑÑÑ, еÑли полÑза Ð¾Ñ Ð½ÐµÐ³Ð¾ знаÑиÑелÑно вÑÑе, Ñем заÑÑаÑÑ Ð¾Ñ ÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ ÐµÐ¼Ñ."})]}),(0,i.jsxs)(n.section,{children:[(0,i.jsx)(n.h2,{children:"ÐаÑеÑÐ¸Ð°Ð»Ñ Ðº ÑазделÑ"}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://agiledesign.org/2015/01/18/jit-just-in-time-and-software-development/",children:"Just-in-time design"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"http://tonsky.me/blog/concrete-vs-abstract/",children:"Solve problem at hand"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://softwareengineering.stackexchange.com/questions/170547/refactoring-and-open-closed-principle",children:"Refactoring and OCP"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://ru.wikipedia.org/wiki/%D0%94%D0%B7%D0%B5%D0%BD_%D0%9F%D0%B8%D1%82%D0%BE%D0%BD%D0%B0",children:"Ðзен пиÑона"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://ru.wikipedia.org/wiki/%D0%91%D1%80%D0%B8%D1%82%D0%B2%D0%B0_%D0%9E%D0%BA%D0%BA%D0%B0%D0%BC%D0%B0",children:"ÐÑиÑва Ðккама"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://www.tonymarston.net/php-mysql/not-so-solid-oo-principles.html",children:"Not so SOLID principles"})}),"\n"]})]})]})}function MDXContent(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,i.jsx)(MDXLayout,_objectSpread(_objectSpread({},e),{},{children:(0,i.jsx)(_createMdxContent,_objectSpread({},e))}))}},4405:function(e,n,t){(window.__NEXT_P=window.__NEXT_P||[]).push(["/ocp/limits-and-caveats",function(){return t(9995)}])}},function(e){e.O(0,[374,214,774,888,179],function(){return e(e.s=4405)}),_N_E=e.O()}]); 2//# sourceMappingURL=limits-and-caveats-1b82b9b43e42c23c.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.