আপনি কীভাবে একাধিক ব্যবহারকারীকে ওয়েব অ্যাপে একই টুকরো ডেটা সম্পাদনা করবেন?


26

আমি এখানে কাজ করছি এমন একটি প্রকল্প রয়েছে যা একটি ওয়েব অ্যাপ্লিকেশন তৈরি করতে চাইছে যা একাধিক ব্যবহারকারীর মধ্যে একটি টাস্ক তালিকা পরিচালনা করবে। এটি একটি মাস্টার টাস্ক তালিকা, যার টাস্ক আইটেমগুলি অনুমোদিত ব্যবহারকারী দ্বারা বিতরণ করা হয়। প্রতিটি ব্যবহারকারীর লগইন করতে এবং তাদের অর্পিত কার্যগুলি দেখার জন্য তার নিজস্ব অ্যাকাউন্ট থাকে; একাধিক ব্যবহারকারীর পক্ষে একটি একক টাস্ক সাধারণ থাকা সম্ভব।

আমি নীচের পরিস্থিতিগুলি কীভাবে পরিচালনা করতে পারি তার সামগ্রিক ধারণাটি নিয়ে আরও আঁকড়ে ধরছি বলে আমি প্রকল্পের বিশদটি বাইরে রাখার চেষ্টা করছি, তবে এটি যদি সহায়তা করে তবে আমি জাভা, এক্সপ্লিসলিংক এবং জিডাব্লুটিটি অনুরোধফ্যাক্টরী সহ ব্যবহার করছি। ডাটাবেসটি পোস্টগ্রিএসকিউএল।

সুতরাং আমি যে ধারণাগত সমস্যাগুলি পুনরায় মিলনের চেষ্টা করছি সেগুলি হ'ল:

  1. একাধিক ব্যবহারকারীর কাছে সাধারণ একক কাজ যদি কোনওভাবেই পরিবর্তন হয় যেমন টাস্ক সম্পূর্ণ, মুছে ফেলা, ইত্যাদি, এই টাস্কযুক্ত সমস্ত ব্যবহারকারীর টাস্ক তালিকা আপডেট করা হবে। এই ফাংশনটি বাস্তবায়নে সহায়তা করে এমন কোন নকশার নিদর্শন রয়েছে?

    • কিছু নিদর্শন আমি দেখেছি যে পর্যবেক্ষক এবং মধ্যস্থতাকারী - এমন কি আরও কিছু আছে যা এগুলি বিবেচনা করা উচিত?
  2. বলুন একই সময়ে একই সময়ে দু'জন ব্যবহারকারী একই কাজটি পরিবর্তন করছেন।

    • প্রথমত, আমি কি সেই পরিস্থিতিটি হওয়ার অনুমতি দেব বা একজন বা অন্য ব্যক্তি পরিবর্তন না করা পর্যন্ত আমি কি এটিতে লক লাগিয়ে দেব?

    • দ্বিতীয়ত, আমি যদি এটিতে কোনও লক না রাখি, তবে কীভাবে পরিবর্তনগুলি গ্রহণ করার জন্য আমি তার সাথে পুনর্মিলন করব? এটি 1 এর মধ্যে পরিস্থিতি জড়িত কারণ ব্যবহারকারী 1 ডেটা জমা দিতে পারে এবং ব্যবহারকারী 2 আপডেট হওয়া ডেটা পাওয়ার আগে, সে / সে এগিয়ে গিয়ে তার পরিবর্তনগুলি জমা দিতে পারে।

এই ওয়েব অ্যাপ্লিকেশনটির একাধিক উদাহরণের মধ্যে কীভাবে ডেটা সঠিকভাবে সিঙ্ক করতে হয় সে সম্পর্কে আমি যে কোনও গাইড পয়েন্ট, পরামর্শ বা টিপস সরবরাহ করতে পারি তা সত্যিই আমি খুঁজছি। আমি খুব কৃতজ্ঞ হবে!

উত্তর:


17

আমি মনে করি হোয়াইটবোর্ড আপনার পছন্দসই প্যাটার্নটি # 1 এর জন্য হবে, আপনার কোনও সাধারণ জায়গায় টাস্কগুলিতে (বা অন্যান্য ভাগ করা ডেটা) পরিবর্তন পোস্ট করা উচিত, যাতে সমস্ত আগ্রহী দলগুলি সেগুলি এবং ডিটিআরটি দেখতে পারে।

# 2 এর জন্য আপনার আশাবাদী লকিংয়ের দিকে তাকাতে হবে । মূলত, আপনাকে শেষ আপডেটের সময় সহ সমস্ত সম্পাদনযোগ্য রেকর্ডগুলির টাইমস্ট্যাম্প করা দরকার। আপনি যখন রেকর্ডটি সংরক্ষণ করার চেষ্টা করবেন, আপনি প্রথমে যাচাই করে নিন যে ডাটাবেসে থাকা রেকর্ডটিতে আপনার রেকর্ডের মতো একই সর্বশেষ আপডেট হওয়া টাইমস্ট্যাম্প রয়েছে। যদি তা না হয়, তবে কেউ রেকর্ডটি আপডেট করেছে এবং আপনাকে এখন আপডেট করা রেকর্ড পেতে হবে এবং ব্যবহারকারীকে তাদের পরিবর্তনগুলি আবার প্রবেশ করতে হবে তা জানাতে হবে, অথবা আপনি ব্যবহারকারীর পরিবর্তনগুলি আপডেট রেকর্ডে মার্জ করার চেষ্টা করতে পারেন (যা সাধারণত দেখা যায়) হয় সাধারণ বা অসম্ভব)।


7

আমি ডেস্কটপ অ্যাপ্লিকেশনটির জন্য একটি নকশা নিয়ে এসেছি (এটি এখনও পুরোপুরি পরীক্ষিত হতে পারে) অনুরূপ প্রয়োজনীয়তাগুলির সাহায্যে সহায়ক হতে পারে।

আমার সমাধানটি ছিল এমভিসি প্যাটার্নটি (একক মডেল কিন্তু একাধিক কন্ট্রোলার এবং ভিউ সহ) নিয়োগের জন্য যেখানে প্রতিটি কন্ট্রোলার লেনদেন ( এসটিএম ব্যবহার করে ) মডেলটিতে পরিবর্তন করেন এবং যখন কোনও লেনদেন প্রতিশ্রুতিবদ্ধ হয়, তখন মডেল ভিউতে একটি আপডেট বিজ্ঞপ্তি সম্প্রচারিত করে )।

প্রতিটি ক্লায়েন্ট স্থানীয়ভাবে আপডেট হওয়া কোনও কিছুর উপরে নজর রাখে, কিন্তু যখন সেই স্থানীয় আপডেটগুলি শেষ হয়ে যায় (যেমন প্রতিশ্রুতি দেওয়ার জন্য প্রেরণ করা হয়েছিল) তখন এটি অন্তর্নিহিত মডেলের তথ্য ব্যবহার করে ফিরে আসে।

ব্যবহারকারীরা যে পরিবর্তনগুলি করেছিল সেগুলি আবার ফিরিয়ে দেওয়া যায় তার সাথে আমারও একটি পূর্বাবস্থায় স্ট্যাক ছিল।

এটি ওয়েব অ্যাপ্লিকেশনটির জন্য সেরা মডেল নাও হতে পারে যদিও মডেলটিকে ভিউতে পরিবর্তনগুলি সম্প্রচার করতে হয়েছিল, এটি সম্ভবত সবচেয়ে সহজ W / ওয়েব ক্লায়েন্ট নাও হতে পারে।


4

১. আপনার প্রকাশিত / সাবস্ক্রাইব প্যাটার্নটি আরও উপযুক্ত কিনা তা দেখতে হবে ।
এটি আপনার পরিস্থিতির উপর নির্ভর করে:

  • এই পরিস্থিতি কত ঘন ঘন হবে?
  • এমন পরিস্থিতিটি কতটা খারাপ যে আপনার ব্যবহারকারীদের মধ্যে একটি লকড থাকার কারণে কোনও টাস্ক আপডেট করতে অক্ষম হবে বা এর মধ্যে অন্য কেউ এটি পরিবর্তন করেছে?
    ব্যক্তিগতভাবে আমি একটি পদ্ধতির পছন্দ করি (যেমন পিভোটালট্র্যাকার হিসাবে ব্যবহৃত ) যেখানে রয়েছে:
    • তালা নেই,
    • আপনি রিয়েল-টাইমে সমস্ত পরিবর্তন দেখতে পাবেন এবং
    • ইউআই একাধিক বৈশিষ্ট্যে বড়দের পরিবর্তে ঘন ঘন ছোট ছোট আপডেট করার আমন্ত্রণ জানায়।
    • আপনি যে সমস্ত পরিবর্তন হয়েছে তার একটি ইতিহাস রাখুন। ইতিহাস যদি ব্যবহারকারীদের কাছে দৃশ্যমান হয়, অবশেষে উত্থাপিত দ্বন্দ্ব বা ওভাররাইটগুলি মন্তব্য, টিকা বা ম্যাসেজ দিয়ে সমাধান করা যেতে পারে।

প্রশ্নটি আরও একাডেমিক, সুতরাং সবচেয়ে খারাপ ক্ষেত্রে এটি কীভাবে যত্ন নেওয়া হচ্ছে তা দেখার জন্য আমি খুব ঘন ঘন বলব। প্যাটার্ন রেফারেন্সের জন্য +1।
hulkmeister

@ kr1 পিভোটালট্র্যাকার বিরোধের সতর্কতা অভাবের সাথে অ বিরোধী পরিবর্তনগুলিকে একীভূত করে না, সুতরাং এটি একটি ভাল রেকর্ড সম্পাদনা মাল্টুউসার অ্যাপ্লিকেশন এর ভাল উদাহরণ ব্যবহার করা উচিত নয়।
এডুয়ার্ডো

0
  • লক রেকর্ড এটি অগ্রাধিকারযুক্ত নয় কারণ এটি একযোগে হ্রাস পাবে এবং রেকর্ডটি প্রয়োজনের চেয়ে বেশি সময়ের জন্য লক হয়ে থাকতে পারে।
  • জমা দেওয়ার শেষ অবধি অন্যান্য সমবর্তী পরিবর্তনগুলি ওভাররাইট করে। ব্যবহারকারীরা এটি চান না। জিরার মতো কিছু সফ্টওয়্যার এটি করে। https://community.atlassian.com/t5/Jira-questions/Edit-a-JIRA-Issue-at-the-same-time-by-two-Users-result-in-last/qaq-p/389243
  • একত্রে সম্পাদনাগুলি। অ্যাপ্লিকেশনটিতে কেবলমাত্র রেকর্ডের ক্ষেত্রগুলি পরিবর্তন করা উচিত। এইভাবে আপনি বিরোধগুলি প্রতিরোধ করুন। : বেশীরভাগ উইকি সফটওয়্যার যদি কোনও বিবাদ একই টেক্সট ক্ষেত্রের পরিবর্তন মার্জ করতে পারবেন /programming/3411888/how-does-a-wiki-handle-multiple-simultaneous-edits এটি হিসাবে উদাহরণস্বরূপ দেখুন মিডিয়াউইকি একযোগে সম্পাদনার অনুমতি দেয় এবং দ্বন্দ্বের ক্ষেত্রে ভাল ইউআই থাকে: https://www.mediawiki.org/wiki/Existance : দুই কলকনফ্লিক্ট

আমার প্রস্তাবটি হ'ল কখনই কোনও সংঘর্ষের ঘটনা ঘটলে তা লক না করে রিপোর্ট করা।

দয়া করে একবার দেখুন:

https://github.com/spring-projects/spring-petclinic/issues/433

আপনি একটি ভিডিও এবং নমুনা কোড দেখতে পারেন।

এটি কি আপনার প্রয়োজনীয়তা পূরণ করবে?

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.