Witam, tym razem kilka pytań bardziej opisowych.
- Dajemy na to, że mam zaimplementować wzorzec iteratora, który będzie sortował obiekty klasy według różnych kryteriów. Mam interfejs, który ma metody First, Next, CurrentItem, IsDone.
Teraz rozumiem, że ten interefejs muszą implementować oddzielne klasy dla każdego sortowania. Np. IteratorDateAsc, IteratorDateDsc, itp.
Problem w tym, że ten kod zajmuje trochę miejsca, a różni się szczegółami. Natomiast taka metoda jak CurrentItem czy IsDone jest w ogóle powtarzana. Mimo tego, że programuje od niedawna, to wydaje mi się, że jest to złe podejście. W jaki sposób NAJLEPIEJ do tego podejść? Wszystko mi działa, ale przy 7 kryteriach sortowania mam masę kodu.
- Teraz zupełnie inny przykład. Mam jeden button, który uruchamia dwie różne metody i każda z metod pisze coś do innego TextBoxa, to co jest tam pisane, jest uzależnione od RadioButtona.
Przycisk "Pisz" ma się aktywować, gdy w obu GroupBoxach zostanie cokolwiek zaznaczone. Rozwiązałem to, ale wydaje mi się, że znowu niezbyt optymalnie / poprawnie.
private void radioButton_CheckedChanged(object sender, EventArgs e)
{
if (!flagGroup1 || !flagGroup2)
{
var s = sender as RadioButton;
if (s.Checked)
{
//Tworzę dwie grupy kontrolek RadioButton:
var groupRadioButtons1 = groupBox1.Controls.OfType<RadioButton>();
var groupRadioButtons2 = groupBox2.Controls.OfType<RadioButton>();
foreach (var item in groupRadioButtons1)
{
if (item == s)
{
flagGroup1 = true;
break;
}
}
foreach (var item in groupRadioButtons2)
{
if (item == s)
{
flagGroup2 = true;
break;
}
}
if (flagGroup1 && flagGroup2)
btnUruchom.Enabled = true;
}
}
}
Jakieś rady? Przykład służy jedynie poznaniu trochę języka, więc nie chciałbym się uczyć jakiś złych metod.
- Mam dwa textBoxy, do których jest coś pisane w dwóch oddzielnych wątkach. Żeby nie tworzyć dwóch metod, zrobiłem jedną jednak nie wiem jak ją sparametryzować, żeby pisała do odpowiedniej kontrolki. Przykład, który znowu działa, ale wydaje mi się średni:
private void AppendTextToTextBoxes(string text, string methodName)
{
if (InvokeRequired)
{
AppendTextDelegate myDelegate = new AppendTextDelegate(AppendTextToTextBoxes);
Invoke(myDelegate, new object[] { text, methodName });
}
else
{
if (methodName == "first")
txtFirst.Text += text;
else //w drugiej przekazuje parametrem inną nazwę
txtSecond.Text += text;
}
}
Wywoływanie odbywa się:
AppendTextToTextBoxes(text, "first");
Znowu to samo pytanie, czy robię to poprawnie, czy zbyt chałupniczo?
-
Pytanie takie ogólne... jak się uczyć "ładnego" pisania? Bo wiadomo, że to, że coś działa, niekoniecznie jest dobrze napisane. Nie chciałbym pisać tak, żeby wstyd było kod pokazywać, a nie bardzo mam z kim to konsultować. Skończyłem drugi rok studiów i u mnie raczej żaden z kolegów nie dba o jakość kodu, bo prowadzący też raczej tego nie wymuszają.
-
Czy żeby mieć dostęp do kontrolek z jednej formy w drugiej, to dobrym pomysłem jest robienie tego przez konstruktor?
-
EntityFramework: jeśli mam zrobioną bazę danych i odwołuję się wielokrotnie do modelu, tworząc jego nowe instancje, to powinienem używać Singletonu? Czy nie jest to przerost formy nad treścią? Czy jeśli zaktualizuję bazę, to używając starej instancji modelu będą miał aktualne dane?
-
Możecie polecić jakieś DOBRE materiały, do nauczenie się tworzenia bazy danych podejściem "Code First" w LINQ TO SQL? Piszę troszeczkę też pod WindowsPhone i tam chyba nie ma innej opcji dostępu do lokalnej bazy danych, niż to... a przyznam, że nie bardzo lubię w ten sposób tworzyć bazę, nie czuję tej metody. Zdecydowanie wolę tworzyć graficznie model, ewentualnie napisać to w zwykłym SQL i jedynie korzystając z ORM mapować to na klasy.
-
Czy Wy znacie na pamięć wszystko, co implementuje IDisposable? Jest jakiś dodatek, który podkreślałby mi takie obiekty, żebym nie zapominał zwalniać po nich pamięci? Ewentualnie jakieś narzędzia, które mi "pokażą", że pamięć się nie zwalania? Najlepiej coś prostego, czego mógłbym używać bez wcześniejszego miesięcznego czytania.
Dodam, że to są takie rzeczy, na które natrafiłem podczas samodzielnej nauki, nie jest to żadne zaliczenie i dlatego nie wystarcza mi, że "działa". Nikt kodu oglądał nie będzie i chciałbym po prostu wiedzieć, że robię to poprawnie.
Pozdrawiam