या ब्लॉग लेखात सॉफ्टवेअर डिझाइन तत्त्वांवर आधारित SOLID तत्त्वे आणि Clean Code विचारधारेची सखोल चर्चा करण्यात आली आहे. सॉफ्टवेअर डिझाइनमध्ये प्रवेश करून मूलभूत संकल्पना आणि त्याचे महत्त्व स्पष्ट केलं आहे. SOLID तत्त्वे (Single Responsibility Principle, Open/Closed Principle, Liskov Substitution Principle, Interface Segregation Principle आणि Dependency Inversion Principle) सॉफ्टवेअर विकासातील महत्त्वाची भूमिका बजावतात. Clean Code या दृष्टिकोनाचे महत्त्व सांगितले असून, तत्त्वांचा प्रत्यक्ष उपयोग आणि फायदे उदाहरणांसह व्याख्यायित केले आहेत. डिझाइनमध्ये बारंबार होणाऱ्या चुका नमूद करून, टेस्टिंगच्या पद्धती आणि वापरकर्त्यांच्या अभिप्रायाची भूमिका स्पष्ट केली आहे. शेवटी, यशस्वी सॉफ्टवेअर डिझाइनसाठी सर्वोत्तम पद्धती सांगत विकसकांसाठी मार्गदर्शक दिली आहे.
सॉफ्टवेअर डिझाइनमध्ये प्रवेश: मूलभूत संकल्पना आणि महत्त्व
सॉफ्टवेअर डिझाइन हे प्रकल्पाच्या यशासाठी अत्यंत आवश्यक टप्पा आहे. हे चरण गरजांची स्पष्टता मिळाल्यानंतर, कोड लिहिण्याआधी नियोजन आणि रचना निश्चित करण्यासाठी उपयुक्त ठरते. चांगला सॉफ्टवेअर डिझाइन प्रकल्प स्पष्ट, टिकाऊ आणि स्केलेबल बनवतो. या प्रक्रियेत विकसक, वापरकर्त्य NEEDS आणि सिस्टम आवश्यकतांचे आकलन करून योग्य आर्किटेक्चर आणि डिझाइन पॅटर्न निवडतात.
डिझाइनचा मुख्य हेतू क्लिष्ट समस्यांना छोटे, हाताळता येणारे भाग करून समाधान सुलभ करणे. प्रत्येक विभागावर स्वतंत्रपणे काम करता येते आणि नंतर सर्व विभाग मिळून एकात्मिक समाधान मिळते. यामुळे, विकसन प्रक्रियेत वेग आणि अडचणींच्या ओळख-निवारणात मदती होते. तसेच, चांगला डिझाइन भविष्यातील बदलांना आणि नव्या आवश्यकतांना स्वीकारण्यास सक्षम बनतो.
-
सॉफ्टवेअर डिझाइनचे लाभ
- सॉफ्टवेअर अधिक सुस्पष्ट आणि वाचनीय होते.
- चुका लवकरून ओळखता येतात.
- देखभालीचे आणि सुधारणीचे खर्च कमी होतात.
- नव्या फिचर्स जोडणे सोपे होते.
- स्केलेबलिटी सुधारते.
- विकसनाचा वेग वाढतो.
खालील तक्त्यात, सॉफ्टवेअर डिझाइनमध्ये वापरल्या जाणाऱ्या काही मूलभूत संकल्पना आणि त्याचे स्पष्टीकरण दिले आहे. या संकल्पना विकसकांना अंदाधुंद कोड टाळून सखोल आणि प्रभावी डिझाइन तयार करताना मदत करतात.
| संकल्पना | स्पष्टीकरण | महत्त्व |
|---|---|---|
| Architecture | सॉफ्टवेअरची एकूण संरचना आणि घटकातील संबंध. | फाउंडेशन ठरतो; स्केलेबलिटी, परफॉर्मन्स सारख्या गुणांवर प्रभाव. |
| Design Patterns | पुरावे असलेली क्लिष्ट समस्या सुलभीकरणाच्या उपाययोजना. | विश्वसनीय आणि टिकाऊ डिझाइन मिळवण्यास मदत. |
| Modularization | स्वतंत्र आणि वापरण्याजोग्या भागात सॉफ्टवेअर विभागणे. | डिझाइनचे व्यवस्थापन व विस्तार सोपे होते. |
| Abstraction | जटिल मुद्दे लपवून आवश्यक माहिती फक्त पुढे ठेवणे. | सॉफ्टवेअर स्पष्ट व वापरण्यास सुलभ बनते. |
सॉफ्टवेअर डिझाइन प्रक्रियेत नियमित अभिप्राय घेणं अत्यंत महत्त्वाचे आहे. वापरकर्त्यांचे व अन्य हितधारकांचे अभिप्राय डिझाइन सुधारण्यात आणि त्यांचा उपयोग योग्य बनवण्यात मदत करतात. त्यामुळे प्रक्रियेच्या सुरुवातीपासून अभिप्राय यंत्रणा तयार व सतत वापरणे आवश्यक आहे.
SOLID तत्त्वे: सॉफ्टवेअर डिझाइमध्ये मूलभूत मार्गदर्शक
सॉफ्टवेअर डिझाइन तत्त्वे, टिकाऊ, वाचनीय आणि देखभालीस सोपी सॉफ्टवेअर तयार करतात. SOLID तत्त्वे Object Oriented डिझाइनमधील आधारस्तंभ आहेत; कोड पुनरावृत्ती कमी करतात, dependency नियंत्रण करतात आणि टेस्टिंग सोपी करतात. प्रगत आणि कार्यक्षम सॉफ्टवेअरसाठी SOLID तत्त्वे समजून व अमलात आणणे आवश्यक आहे.
SOLID म्हणजे पाच तत्त्वांचा संक्षिप्त रूप असून, प्रत्येक तत्त्व डिझाइनचे वेगवेगळ्या पैलूंवर लक्ष केंद्रित करते. या तत्त्वांची अंमलबजावणी मजबूत, adaptable आणि कमी दोषपूर्ण सॉफ्टवेअर मिळवण्यासाठी मदत करते. नंतरच्या बदलांच्या वेळेस हीताच घेतल्यामुळे इंजिनियरिंग खर्च कमी आणि यशाचा मार्ग खुला होतो.
| तत्त्व | स्पष्टीकरण | लाभ |
|---|---|---|
| Single Responsibility Principle (SRP) | एका class किंवा moduleमध्ये एकच जबाबदारी हवी. | Modular, testable आणि understandable code. |
| Open/Closed Principle (OCP) | Class विस्तारित करण्यास open, बदलण्यासाठी closed हवी. | Existing code न बदलता नव्या फिचर्ससाठी expansion. |
| Liskov Substitution Principle (LSP) | Subclasses parent classesच्या जागी वापरण्यास सक्षम हवी. | खरे polymorphism सुनिश्चित करते. |
| Interface Segregation Principle (ISP) | क्लासने उपयोगात नसलेल्या interface implement करू नये. | Customized, slim interfaces. |
| Dependency Inversion Principle (DIP) | Higher-level modules should not depend on lower-level modules. | Loose coupling, reusable, testable code. |
SOLID तत्त्वे फक्त object oriented साठी नाही; इतर paradigmsमध्येही लागू आहेत. SOLIDमुळे सॉफ्टवेअर टिकाऊ, गतिमान आणि कमी गुंतागुंतीचे होते.
- SRP: प्रत्येक क्लास/moduleचा एकच उद्देश.
- OCP: विस्तारास open, बदलास बंद.
- LSP: subclasses parent classच्या जागी वापरण्यास सक्षम.
- ISP: वापरात नसलेल्या methodवर निर्भरता करू नये.
- DIP: Higher level modules should not directly depend on lower level modules.
Single Responsibility Principle
SRP नुसार, class किंवा moduleमध्ये बदलाचा एकच कारण असावे. म्हणजेच एकाच classमध्ये अनेक responsibility ठेवणे चुकीचे, त्यामुळे कोड complex, testing अवघड आणि unexpected issues येऊ शकतात. SRP मानलेले design modular, वाचनीय आणि maintainable बनते.
Open/Closed Principle
OCP नुसार, सॉफ्टवेअर entity (class/module/function) expansionसाठी open, बदलासाठी बंद असावी. म्हणजे नव्या behavior add करताना existing code modify न करता extend करावे. हे principle खास करून मोठ्या projectsमध्ये खूप आवश्यक; कारण regression errors कमी राहतात.
सॉफ्टवेअर डिझाइनमध्ये Clean Code तत्त्वे
Clean Code principles software human-readable आणि maintainable करण्यासाठी वापरली जातात. Clean code हे केवळ मशीनसाठी नाही; विकसनासाठी, परीक्षणासाठी आणि विस्तारासाठी सर्वाधिक उपयुक्त आहे. जटिल, अस्पष्ट code maintenance cost वाढवते, bugs वाढवते आणि नव्या फिचर्ससाठी अडचणी निर्माण करते. त्यामुळे Clean Code अंकित शिस्त आवश्यक आहे.
| तत्त्व | स्पष्टीकरण | लाभ |
|---|---|---|
| Readability | क्लिअर, concise आणि human-friendly code. | जलद adaptation, maintainability, कमी errors. |
| Single Responsibility | प्रत्येक class/functionचे एकच कार्य. | Modularity, testability, reusability. |
| DRY (Don't Repeat Yourself) | Repeated code टाळणे. | Short, easier maintenance, consistency. |
| Naming | Variables/functions/classesना सुस्पष्ट नाव ठेवणे. | Readability, clarity, consistency. |
Clean Code म्हणजे केवळ code structure नव्हे; code functions, naming, complexityही भक्कम ठेवीत आहे. Function concise आणि focused असेल; variable names खुली आणि स्पष्ट असावीत.
- म्हणजे नाव ठेवताना: variable/function/classना ग्राह्य नाव द्या.
- फंक्शन लहान ठेवा: प्रत्येक function एकच कार्य करावा.
- comments: आवश्यक भागात comment द्या; कोडच self explanatory असावा.
- DRY: duplicate code एकत्र करून reuse करा.
- Error handling: faults systemically handle करा आणि वापरकर्त्याला स्पष्ट message द्या.
- Testing: code correct असल्याची पडताळणी करण्यासाठी automation tests लिहा.
Clean Codeचा वापर करताना सतत code चाचणी व सुधारणा करा. Code दुसऱ्याला वाचता येईल आणि बदलता येईल अशा पद्धतीने लिहा. कोड फक्त चालता असावा एवढे पुरेसे नाही; तो maintainable आणि readable असावा, हाही दृष्टिकोन ठेवावा.
Clean Code means तत्त्वांपेक्षा attitude. प्रत्येक ओळीचा अर्थ स्पष्ट असा असावा – हे तुमचे आणि टीमचे काम सोपे आणि यशस्वी बनवते.
“कोड जो मशीन समजू शकते तो कोणीही लिहू शकतो; पण जो human समजू शकतो तो चांगला प्रोग्रामर लिहू शकतो.” – Martin Fowler
Clean Codeचे महत्त्व हे बोलके आहे.
SOLID आणि Clean Codeचे फायदे
सॉफ्टवेअर डिझाइन तत्त्वांनी बनलेली प्रोजेक्ट्स अनेक लाभ देतात; टिकाऊपणा, वाचनीयपणा आणि testability. त्यामुळे development process जलद, cost effective आणि quality वाढते.
- More readable: future developer किंवा तुम्हीच सुलभ समजू शकता.
- Better maintainability: modular आणि structured code बदलांना adapt करतो.
- Fewer errors: clean codeमुळे समस्या सहजपणे शोधता आणि दुरुस्त करता येतात.
- Rapid development: नव्या फिचर्स किंवा सुधारणा सहज करता येतात.
- Low cost:-कमी maintenance खर्च, काळानुसार saving.
SOLID principles adapt झाल्यावर project robust आणि scalable बनते. Clean Codeचा उपयोग collaboration आणि onboarding सुलभ करतो.
| लाभ | SOLID Principle | Clean Code Principle |
|---|---|---|
| Maintainability | Open/Closed Principle | Modular Design |
| Readability | SRP | Meaningful Naming |
| Testability | ISP | Straight Functions |
| Flexibility | LSP | Unnecessary Complexity Avoidance |
या तत्त्वांचा अवलंब करून प्रोजेक्ट्स अधिक यशस्वी आणि दीर्घकाळ टिकतात.
SOLID आणि Clean Code प्रत्यक्ष वापर
सविस्तर तत्त्व समजणे उपयुक्त असले तरी, प्रत्यक्ष projectsमध्ये SOLID व Clean Code कसे वापरायचे याचे आकलन जास्त महत्वाचे. टीमचा अनुभव, project size आणि आवश्यकतेनुसार तत्त्व लागू करावेत.
| Principle/Usage | Description | Practical Example |
|---|---|---|
| SRP | एकच जबाबदारी. | Report class रिपोर्ट तयार करतो; Database access बाह्य classमधून. |
| OCP | Extension, but no modification of current classes. | नवीन report टाइपसाठी नवा class create, existing class न बदलता. |
| Clean Code – Functions | Short, focused function. | User validation function should just validate, nothing else. |
| Clean Code – Naming | Clarity in naming. | `calculateTotalAmount` वापरा, `calc` टाळा. |
टीममध्ये SOLID व Clean Code तत्त्वांची माहिती असेल, याची खात्री करावी. Training, workshops आणि code review वापरून या शिस्तीची सुरुवात करा. लहान प्रकल्पांपासून प्रारंभ करून नंतर क्लिष्ट scenarioवर जा.
-
SOLID व Clean Code वापर चरण
- मूलभूत तत्त्वे शिका.
- लहान प्रोजेक्ट/moduleमध्ये प्रत्यक्ष वापरा.
- Code reviewमधून feedback घ्या.
- Refactoring नियमित करा.
- Knowledge sharing सांभाळा.
- Design patterns आवश्यकतेनुसार वापरा.
सर्व तत्त्व प्रत्येक projectमध्ये आवश्यक नसेल; simplicity ही विशेष आहे.
उपयोगात आणणे
तत्त्वांची अंमलबजावणी सुरू केल्यानंतर, तिचे पालन सुनिश्चित करणे आवश्यक आहे. Automated tests, static code analysis आणि code reviews वापरा; संभाव्य अडचणी लवकर शोधता येतील.
कोड समीक्षा
Code Review म्हणजे तत्त्वे योग्य वापरली आहेत का याचा आढावा; readability, maintainability, testability, principle adherence चाचणी. टीममध्ये information sharing आणि standardizationसाठी यशस्वी साधन.
सॉफ्टवेअर डिझाइनमध्ये सामान्य चुका

सॉफ्टवेअर डिझाइनमध्ये झालेल्या चुका पुढे मोठ्या प्रश्नांची कारणं बनतात. अशा चुका टाळल्यास टिकाऊ, स्केलेबल आणि maintainable code तयार होतो.
सर्वाधिक सामान्य चुक म्हणजे requirements नीट समजून न घेता design करणे. क्लायंट/पार्टनर्सची अपेक्षा नीट न समजली तर चुकीचे design किंवा incomplete solutions तयार होतात. परिणामी, पुढच्या टप्प्यावर बदलांची मोठी किंमत आणि वेळ खर्च होतो.
-
डिझाइनमधील टाळावयाच्या चुका
- गरजांचा अपूर्ण अभ्यास
- कराड plan आणि analysis
- अनावश्यक complex design
- अपुरा testing आणि validation
- Duplicate code
- Flexibility आणि scalabilityची कमतरता
- Security मुद्द्यांकडे दुर्लक्ष
अपुरा planning, analysisसाठी कमी वेळ, details skip; सर्व सामान्य चुका. systemचे घटक, data flow आणि issues नीटपूर्वक विचार असावा.
| चुकीचा प्रकार | स्पष्टीकरण | परिणाम |
|---|---|---|
| Requirements ambiguity | धावत्या आवश्यकतांचा अभ्यास न करता design | Wrong features, delay, high cost |
| Over engineering | Needless complexity | Maintenance problems, performance issues, higher cost |
| Poor modularity | Dependency heavy, non-separable code | Reuse आणि test problematic |
| Insufficient security | Poor security measures | Data leak, misuse |
Simplicity is reliability. – Edsger W. Dijkstra
साधेपणाच विश्वासार्हतेचा पाया आहे.
म्हणून designमध्ये simplicity principle पाळा.
सॉफ्टवेअर डिझाइनमध्ये टेस्टिंग पद्धती
Testing process हे डिझाइनचे अत्यावश्यक अंग; दोष लवकर सापडतात आणि गुणवत्ता/परफॉर्मन्स गाठता येतो. Test strategyमुळे defect early detection, correction आणि launchचे वेळ/खर्च कमी होतो.
Testingचे अनेक स्तर: unit test, integration test, system test, user acceptance test (UAT). Automated testingने routine tests जलद, resources वाचतात तर manual tests complex scenarios आणि user experience verifyसाठी उपयुक्त.
| Test प्रकार | स्पष्टीकरण | उद्देश |
|---|---|---|
| Unit Test | Functions/methods individually test | Each unit works correctly |
| Integration Test | Units together function test | Inter unit interaction is proper |
| System Test | Full system requirement test | System-wide validation |
| User Acceptance Test (UAT) | Final user experience test | User needs are fulfilled |
Testing प्रक्रियेचे टप्पे:
- Test plan तयार करा: test domain, method आणि criteria define करा.
- Test scenario डिजाइन करा: प्रत्येक test case साठी detail scenario.
- Test environment setup: test अनुकूल वातावरण.
- Test run: scenarioनुसार test execute करा.
- Bugs report करा: detail defect log.
- Rectify आणि re-test: correction, validation.
- Analysis: test effectiveness mha.
Test म्हणजे केवळ validation नाही; feedback mechanismही आहे. Effective testing quality, cost आणि customer satisfaction सुधारतो.
सॉफ्टवेअर डिझाइनमध्ये वापरकर्ता अभिप्राय
Designमध्ये user feedback यशासाठी आवश्यक. User अनुभव, अपेक्षा या अभिप्रायातून design decisions guide होतात. Feedbackमुळे product user-centric, error-free आणि अधिक समाधानकारक बनतो.
Feedback मिळवण्यासाठी विविध पद्धती: surveys, user testing, focus groups, social media tracking, in-app feedback, A/B testing. Project प्रकार, budget आणि target audienceनुसार पद्धती निवडा. Feedback प्रक्रियेत continuity आणि systematic collection आवश्यक.
- Survey: User opinion via questions
- User Testing: Observing actual use
- Focus Group: Group discussion, deep feedback
- Social Media Tracking: Reviews/comments monitoring
- In-app Feedback: Direct feedback from app.
- A/B Testing: Comparative design test
Feedbackचे analysis, categorization, prioritization, आणि concerned teamपर्यंत पोहोचवणे – या processला अर्थ मिळतो.
अभिप्राय विश्लेषण
Data संग्रहीत करून त्यातून patterns/expectations शोधता येतात. Feedback analysis design निर्णयात direction देतो. योग्य analysis व resources efficient usage मिळवतो.
| Feedback Source | Type | Sample | Action |
|---|---|---|---|
| Survey | Usability | Interface complex, navigation hard. | Simplify interface and improve UX. |
| User Testing | कार्यक्षमता | Slow app launch | Optimize startup speed. |
| Social Media | Bug Report | Login failing, can't access app | Diagnose and fix login bug ASAP. |
| In-app Feedback | Feature Request | Want dark mode option | Plan and include dark mode feature. |
Feedback एका information sourceपेक्षा connection tool आहे. Userला feedback मानले जाते, गोष्टी ऐकल्या जातात हे त्यांची loyalty आणि satisfaction वाढवते.
वापरकर्ता अभिप्राय म्हणजे productचा compass; त्याला ऐकणे म्हणजे योग्य मार्गावर जात आहात.
सॉफ्टवेअर डिझाइनमध्ये सर्वोत्तम पद्धती
सॉफ्टवेअर डिझाइन म्हणजे code लेखनापेक्षा अधिक; sustainability, readability आणि extensionabilityवर थेट परिणाम. "Best Practices"ठेवण्याने success rate वाढतो. Design quality projects नवे features, fixes आणि errors management सोपे बनवतात.
| Practice | Description | Benefit |
|---|---|---|
| SRP | Each class/module: single responsibility | Modular, readable, testable code. |
| OCP | Extendable, immutable classes | Add features without code rewrite. |
| LSP | Substitute subclasses for parent | Correct polymorphism, error prevention. |
| ISP | Avoid unused methods dependency | Flexible, manageable interfaces. |
Best practices हे केवळ theory नाही, practical experienceही आहे. Code review, continuous integration, automated tests quality वाढवतात. टीम feedbackमुळे defects early काळात सापडतात.
- DRY: Code duplication टाळा.
- High cohesion, Low coupling: Component dependency कमी ठेवा.
- Clear naming: Meaningful variable/function/class names.
- Small functions: Single-task functions.
- Error handling: Faults handle and user-friendly messages.
- Code comments: Complex भाग explain करा, code self-explanatory ठेवा.
नव्या technology, tools आणि design patternsमुळे सतत शिकणे व सुधारणा आवश्यक. चुकीचा code सुधारणे आणि quality वाढवणे हे यशस्वी designerचं मुख्य mantra!
संपूर्ण code लेखन ही कला आहे. चांगला विकसक म्हणजे readable, maintainable आणि extensible code सुद्धा लिहितो.
निष्कर्ष: सॉफ्टवेअर डिझाइनमध्ये यशस्वी होण्याचे मार्ग
सॉफ्टवेअर डिझाइनमध्ये यश केवळ theoretical अध्ययन नाही, practical application, experience आणि feedback आवश्यक. SOLID principles, Clean Code तत्त्वे complex situations tackle, scalable व maintainable systems बनवतात.
| Challenges | Causes | Strategies |
|---|---|---|
| High Coupling | Tightly coupled classes/modules | DIP, interfaces, abstractions. |
| Low Cohesion | Multiple responsibility classes | SRP, break down into smaller units. |
| Code Duplication | Repeated code fragments | DRY, reusable functions/classes. |
| Testing Problems | Non-testable code | IoC, dependency injection, TDD. |
प्रत्येक project unique; म्हणून flexibility आणि best solution हे आवश्यक आहे.
-
उपयुक्त निष्कर्ष
- SOLID principles समजून आणि लागू करा.
- Clean Code अंमलबजावणी करा.
- Practice आणि application लागो लाग.
- कायम code review करा.
- Regular refactoring करा.
Technical knowledgeबरोबर communication skillsही लागतात; needs analyze, design explain आणि team collaboration महत्वाचे आहे.
वारंवार विचारलेले प्रश्न
SOLID तत्त्वे का पाळावीत? त्याकडे दुर्लक्ष केल्याने काय घडू शकते?
SOLID तत्त्वे पालल्यास code sustainable, readable आणि maintainable बनतो. दुर्लक्ष केल्यास कोड complex, error-prone आणि future changesमुळे उच्च cost होतो. मोठ्या प्रकल्पांसाठी SOLID अंमलबजावणी अनिवार्य आहे.
Clean Code approachचा विकसकाच्या routineवर प्रभाव काय?
Clean Code approachमुळे विकसक अधिक विचारपूर्वक आणि structured code लिहितो. Debugging time कमी, new developer onboarding सोपे, code quality overall वाढते.
SOLID मधील SRP काय? SRP break करणारे scenario?
SRP: एक class/moduleमध्ये एकच जबाबदारी. उदा. ‘Report’ class रिपोर्ट process आणि export (PDF, Excel) काम करणे – SRP break. योग्य स्थितीत process व export वेगळ्या classमध्ये.
Testingचे महत्त्व आणि कोणते tests उपयुक्त?
Testingमुळे defects early detection; unit test function/class isolated test, integration test component connectivity test. System, acceptance आणि performance test देखील quality improvementसाठी वापरले जातात.
Clean Code तत्त्वांची अंमलबजावणी करताना येणाऱ्या अडचणी आणि उत्तर?
Old habits बदलणे, refactoring time, abstract thinking ही अडचणी. Solution म्हणून code reviews, continued practice, prototype code study, principle learning उपयुक्त.
SOLIDचा architectureवर प्रभाव आणि योग्य architecture design कसा करायचा?
SOLIDमुळे architecture modular, flexible आणि scalable बनतो. Responsibilities clearly define, classes/modules split, dependency minimize, abstractions use ही रणनीती.
User feedbackचा designमध्ये रोल काय?
User feedbackमुळे design usable, useful आणि needed featuresने परिपूर्ण बनतो. Feedback design, development, testing phasesमध्ये collect करावे; initial prototypeवर feedback घेतल्यामुळे costly changes avoid करता येतात.
सॉफ्टवेअर डिझाइनमध्ये सामान्य चुका आणि त्यासाठी काय काळजी घ्यावी?
Complex/unclear code, excess dependency, SOLID break, testing absence, feedback neglect ही प्रमुख चुका. Simple, readable code, minimized dependency, SOLID adherence, regular testing आणि feedback consideration आवश्यक.