بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

روشی راحتتر برای بازکردن یک Activity

مدیریت گفتگو
AllahYar 12 سال پیش
آخرین تغییر: 12 سال پیش

یه چیز خیلی عادی رو خواستم بگم به کاربرهای آماتور مثل خودم اگه با متدها آشنا شدن و اکتیوی رو هم فهمیدن پس بهتر تو کلاس اکتیویتی  پدر یه متدی نوشته بشه  و فقط یک پارامتر رو دریافت کنه و اونم مسیر اکتیوی که باید هدایت  بشه 

  public void ActionActivity(Class Activity)
    {
        Intent intent = new Intent(G.CurrentActitvity, Activity);
        G.CurrentActitvity.startActivity(intent);
    }

و بعد برای فراخوانی :

ActionActivity(SampleActivity.class);

و دیگه نیازی نیست هر بار اینت ایجاد بشه و ماکارانی بنویسیم

نظرات

rayacoder 12 سال پیش
هنوز ماکارونی مینویسی که :دی متد با حرف کوچیک شروع میشه دلبندم ;) دیگه نظری ندارم
آیتمی که شما معرفی کردی یا ایرادی که دوستمون گرفتن جزو تعاریف اسپاگتی کد نیست : لینک
uncocoder 12 سال پیش
اگر به این کد می گید ماکارانی، پس به کدهایی که برای راه اندازی یک ListView ساده و بدتر از همه قابل Search بنویسیم، چی میگید؟ حتماً میشه یه دیگ اسپاگتی.
uncocoder 12 سال پیش
تیتر سئوال تصحیح شد، بهتر تیتر سئوال بنویسیم :)
AllahYar 12 سال پیش
آخه از بس در پی اچ پی عادت کردیم به ام وی سی که من یکی لااقل انتظار دارم ویزارد باشه خخخخ
uncocoder 12 سال پیش
به نظر من MVC خودش اسپاگتی هست. اگر VC بود خیلی بهتر بود این وسط به نظر من M اضافه هست.
AllahYar 12 سال پیش
درسته مدل کاربردی نداره منم این نظر رو دارم ولی قبول ندارم اسپاکتی هست میشه بگین علتش چیه که این نظر رو دارین ؟
uncocoder 12 سال پیش
اگر مدل باشه لازانیا هست و اگر نباشه اوکی هست مشکلی نیست. در واقع Model و Controller خیلی به هم شبیه هستند و به نظر من پاس دادن دیتا بین Controller و Model خیلی بی معنیه. تعجبم از اینکه چرا اکثر برنامه نویس های حرفه ای وجود Model رو واجب می دونن ولی به عقیده من طراح MVC یه کمکی بیکار بوده و برا خودش اختراع کرده و Microsoft هم به اسم تکنولوژی گذاشته تو کاراش. قبل از اینکه این اختراع بشه، همه برنامه نویس ها خودشون View رو از Controller جدا کرده بودن و نیاز به راهنمایی مخترع MVC نبود :)
AllahYar 12 سال پیش
درسته ولی تو کیک من نقضشو دیدم و مدل کاربرد خاص خودشون داشت درسته میشه تو کنترلر پیاده سازی کرد ولی اینکه کتابخونه ها مرتبط مدل از مدل استفاده میشد منم الهام گرفتم با این شرط که برای هر جدول مدلی ایجاد نمیکردم قابل توصیف نیست ولی اصولن فکر کنم تنها کاربردش اینه که میفهمی چی به چیه ولی یادمه که کیک از مدلهاش برای صحت اطلاعاتش استفاده میکرد و خیلی کاربردی و مزخرف بود خخخ :)
Vahid 12 سال پیش
AllahYar شما مشخصه که دامیومنت های کیک رو نخوندین کامل که نمیدونید کاربرد Model ها چی هستن اگر کامل بخونید نظرتون 180 درجه برمیگرده ...
وجود مدل و کنترلر جدا از هم لازمه. مدل موجودیتی بدون تصمیم گیری و کنترلر موجودیتی بدون دیتا هستش. وجود هر دو در کنار هم منطق برنامه رو از دیتا جدا میکنه.
rayacoder 12 سال پیش
به نظر منم مدل باید باشه. من با Yii کار کردم و تصور اینکه مدل نداشته باشم برام سخته. اصولا اگه مدل لازم نبود این همه بزرگان نرم افزاری نمیپذیرفتنش.
مجتبی یگانه 12 سال پیش
از اونجایی که حرفی برای گفتن ندارم (!) ،اگه ممکنه یک سری منبع معرفی کنید ، محض رضای خدا منم بفهمم موضوع چیه :|
حامد 12 سال پیش
من که نفهمیدم آموزش آشپزیه یا برنامه نویسی ؟؟؟؟!!!!!
AllahYar 12 سال پیش
چرا وحید جان پروژه هم باهاش نوشتم ولی خیلی وقت پیش حدودا سه سال پیش فکر کنم درست به خاطر ندارم ولی خوندم اینو قول میدم و خوب با ام وی سی آشنا هستم به طوری که یه فریم ورک رو شاید 6 بار بازنویسی کردم تا به نتیجه دلخواه نرسیدم با اینکه هنوز میگم قواعد رو رعایت نکردم ، چندتا از دوستانم دارن ازش لذت میبرن

پاسخ‌ها 4

uncocoder 12 سال پیش

روش گفته شده مناسب نیست، چون خود ActionActivity یک متد static نیست ( راستی actionActivity درسته ) پس نمیشه از هر جایی صداش کرد و اول نمونه باید ساخته بشه که نمونه رو Framework می سازه. راه خوب این هست:

class G extends Application {
...

public static void startActivity(Class<? extends Activity> clazz){
Intent intent = new Intent(G.currentActivity, clazz);
G.currentActivity.startActivity(intent);
}
}

و صدا می زنیم:

G.startActivity(SomeActivity.class);

نظرات

EloMan 12 سال پیش
آیا متد رو هم میشه به عنوان آرگومان فرستاد؟
uncocoder 12 سال پیش
بله، در واقع وارد بخش Reflection میشه که جزء بخش های فوق پیشرفته هست. اما Method یا Field خودشون کلاس هستند و میشه هر کاری باهاشون کرد. حتی میشه به متدهای Private از یک کلاس دیگه یا یک Package دیگه دسترسی پیدا کرد! باورتون میشه!
EloMan 12 سال پیش
جالبه. آیا در آینده در مباحث آموزشی سایت جایی برای این موضوع کنار گذاشتید؟
uncocoder 12 سال پیش
دوستان همین مطالب رو هضم کنند کلی پروژه بزرگ میشه باهاشون انجام داد. Reflection بسیار کاربردی هست اما نه برای نوشتن پروژه بلکه برای نوشتن API و البته ساده تر شدن کد نویسی. مثلاً من برای خودم یک تکه کد نوشتم که بدون نوشتن FindViewById خودش میره، عناصر UI رو پیدا می کنه بعد cast می کنه و بعد میریزه تو فیلد. شما فقط کافیه فیلد رو صدا بزنید. حالا کی آموزشش بدیم، خودمم نمی دونم و فقط خدا می دونه :)
AllahYar 12 سال پیش
واو خواهشمندیم لااقل سورسشو قرار بدین
uncocoder 12 سال پیش
به عنوان یک پروژه انجامش بدید و یک تاپیک براش ایجاد کردم و در قالب یک کار گروهی به نتیجه برسید. سورسش حدود 10 خط هست اما فکر کنم به اندازه 400 خط وقتتون رو بگیره و بعد با یک بعد جدید از Java آشنا میشید. منتظر نتیجه گرفتن تاپیک هستم.
javac 12 سال پیش
در پروژه hangman یادم هست وقتی میخواستید برای اون همه دکمه listener بنویسید از روش تعریف onClick برای دکمه ها استفاده کردید و گفتید که این روش خوبی نیست اما روش درست رو نگفتین ، فکر کنم الان متوجه شدم:))
طاهر 12 سال پیش
به نظرم اگه با یه کم تغییرات putExtra رو هم بهش اضافه کنیم خیلی بهتر میشه و همه جا کاربرد پیدا میکنه
uncocoder 12 سال پیش
می تونید Poly کنید و با یک نام، Signature های مختلف داشته باشه. تو یکیش Bundle پاس بدید که بچسبونه به Intent. این بر عهده خودتون.
طاهر 12 سال پیش
میشه در این مورد بیشتر توضیح بدید یا مرجعی معرفی کنید Poly ، Signature
uncocoder 12 سال پیش
polymorphism و signature رو به صورت غیر مستقیم در آموزشهای شیء گرایی توضیح دادم.
طاهر 12 سال پیش
فکر کنم منظورتون اینه که توابع با نام یکسان و با ورودی های مختلف بنویسیم درسته ؟
طاهر 12 سال پیش

اضافه شد :

 

class G extendsApplication{
...
public static void startActivity(Class<? extends Activity> clazz) {
Intent intent = new Intent(G.CurrentActivity, clazz);
G.CurrentActivity.startActivity(intent);
}


public static void startActivity(Class<? extends Activity> clazz, Bundle bundle) {
Intent intent = new Intent(G.CurrentActivity, clazz);
intent.putExtras(bundle);
G.CurrentActivity.startActivity(intent);
}
}

و صدا میزنیم  ..

G.startActivity(SomeActivity.class);

و یا ..

Bundle b = new Bundle();
b.putString("sameString", "sameValue");
G.startActivity(ActivityArticle.class, b);

نظرات

uncocoder 12 سال پیش
آفرین ، جواب خوبی بود. فقط bundle درسته و نه bundel
uncocoder 12 سال پیش

این تاپیک مخصوص MVC نبود اما چرا شد نمی دونم، عیب نداره ادامه بدیم :)

در پاسخ به دوست عزیز آقای حسین زاده:

نکته همینجاست. چرا C نباید به Data دسترسی داشته باشه؟ ما میگیم V باید از C جدا باشه، منطقیه چون قراره Artist طراحیش کنه و فقط می دونه که یک سری متغیر داره و سر جاشون می چینه. یا اینکه در فرمش یک Url رو صدا می زنه و پارامترها رو بهش ارسال می کنه. دیگه کاری نداره که این تو دیتابیس میشینه یا نه. آرتیست کارش مشخص شد. اما کسی که M رو می نویسه چی قراره بدونه؟ اینکه یک سری ورودی داره که قراره رو Data اثر بذاره و یک سری خروجی بده. اینم قبول، اما C چی می خواد؟ اینکه V رو به M وصل کنه. همین! خوب پس یا C اضافه هست یا M . آیا برای وصل کردن V به M نیاز هست یک رابطه دیگه هم باشه. مثل این می مونه که بگیم می خوایم زنجیر لوستر رو به لوستر وصل کنیم، پس یه تیکه دیگه زنجیر می خوایم! نه میشه ته زنجیر رو به لوستر وصل کرد و تکه دیگری از زنجیر نمی خوایم. البته این نظر من بود و ممکنه اشتباه باشه.

نظرات

محمد حسین زاده 12 سال پیش

دو حالت داره :

1- تو خیلی تیم های برنامه نویسی تیم دیتابیس جداس و با استفاده از روش Codefirst که فرا گیر شده ، تیم دیتابیس عهده دار نگهداری کد لایه Model میشه

2- جدا سازی منطقی این دو لایه حتی در مواردی که یک تیم روی هر دو لایه کار میکنه برای نگهداری برنامه لازمه. تو این حالت میشه با بررسی نوع خطا ( منطق / دیتا ) لایه مربوطه رو بررسی کرد.

بسته به نوع برنامه و گستردگی تیم هر کدوم از M , C ممکنه به لایه های ریز تر هم تقسیم بشن .

یکی از دلایل اینهمه تقسیم بندی تو محیط های عملیاتی اینه که هر تیمی باید نسبت که کد خودش و باگهاش پاسخگو باشه. این تقسیمات کار تیم دیتابیس و منطق رو هم جدا میکنه پس خطاهای دریافت شده از سوی مشتری هم سریعتر جواب داده میشه.

رفرنس هم که برای دلایل وجود MV* زیاده. ولی تو همه موارد صرف نظر از مدل و ویو حتما بخشی برای منطق جداگانه در نظر گرفته میشه . در MVC : controller و در MVVM : ViewModel و ...

نظرات

uncocoder 12 سال پیش
مرسی پاسخ خوبی بود. حالا بهتر می تونم علت وجود M رو درک کنم. اما احساس می کنم کد نویسی خیلی تکراری میشه. هی از این پاس بدی به اون، اون به اونیکی، بعد اونیکی به اون و بعد اون به این. :) اونیکی = M ، اون = C و این = V چقدر قشنگ توضیح دادم :)
حالا جالب تر اینجاس که تو کنترلر شما حق پیاده سازی منطق رو داری، ولی حق فیلتر کردن دیتا رو نداری! لایه سرویس که زیر مجموعه مدل هست میتونه دیتا رو از مدل بگیره فیلتر کنه و به کنترلر بده! اینطوری میشه که اون زنجیر لوستر دیگه تکه تکه میشه. ولی انصافا کارایی خوبی داره!
Vahid 12 سال پیش
استاد شما زیاد پاس بده به این به اون کردید :D، در کل در روش MVC وقتی C نیاز به دیتا داره خودش از M بدون این که شما چیز اضافه بنویسید دیتا رو میگیره ، اگر در M فیلتر خواصی بود مثل رابطه های جداول، فیل های ورودی، نوع و هزاران مورد دیگه روی دیتایی که به C میرسه اعمال میشه مگر اینکه شما بهش بگید دیتای خام میخوام، توی MVC خیلی خیلی خیلی نگهداری نرم افزار ساده تر میشه و خیلی جاها تکرار حذف میشه ... بخدا اگر MVC بد بود بزرگان ازش استفاده نمیکردن ...
مجتبی یگانه 12 سال پیش
از اساتید و بزرگواران خواهشمندیم ، ما رو هم با این MVC آشنا کنید ، با یکم تحقیق به این لینک رسیدم لینک ، ولی خیلی جامع توضیح ندادن ، برداشت فعلی ام هم از این تاپیک این هست که "دوستان همین مطالب رو هضم کنند کلی پروژه بزرگ میشه باهاشون انجام داد" و "ولی انصافا کارایی خوبی داره!" و "بخدا اگر MVC بد بود بزرگان ازش استفاده نمیکردن"
AllahYar 12 سال پیش
A.L.U جان جریان از این قراره که ام وی سی یه نوع منطقه که از روی سه قاعده پیروی میکنه MODEL VIEW CONTROLLERو مزیتش اینه برنامه انعطاف پذیر میشه و هر چی پروژه گسترش پیدا کنه سردرگمی پیدا نمی کنی اسپاگتی خیلی کم میشه مدیریت کامل روی پروژه داری و عیب یابی و سرعت عمل بالاتری پیدا میکنی بزار راحتر بگم که عملکردها درون کنترلر ها ریخته میشه و مشاهدات ویو مثل قالب ها و مدل ها هم پایگاه داده و عملکردهای پایگاه داده تمامی اجزا جدا از هم نوشته میشه ولی قابل استفاده هستن
طاهر 12 سال پیش
دوستان اهل فن یه تایپیک جداگانه برای MVC ایجاد شد . لطفا توضیحات کامل رو در اونجا قرار دهید
uncocoder 12 سال پیش
ادامه این بحث به لینک منتقل می شود. مرسی Taher

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .