вторник, 8 ноября 2011 г.

О том, что надо лениться

Два примера, когда здоровая лень - это здорово!
Первый пример из XAML.Есть три ListBox следующего вида:
<ListBox Grid.Row="2" x:Name="lbToDo" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ItemTemplate="{StaticResource ToDoAndDoneItems}">
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel>WrapPanel>
        ItemsPanelTemplate>
    ListBox.ItemsPanel>
ListBox>
<ListBox Grid.Row="2" Grid.Column="1" x:Name="lbInProgress" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ItemTemplate="{StaticResource InProgressItems}">
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel>WrapPanel>
        ItemsPanelTemplate>
    ListBox.ItemsPanel>
ListBox>
<ListBox Grid.Row="2" Grid.Column="2" x:Name="lbDone" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ItemTemplate="{StaticResource ToDoAndDoneItems}">
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel>WrapPanel>
        ItemsPanelTemplate>
    ListBox.ItemsPanel>
ListBox>
Выносим все общее в стили и получаем:
<ItemsPanelTemplate x:Key="WrapItemsPanel">
    <WrapPanel>WrapPanel>
ItemsPanelTemplate>
<Style TargetType="ListBox">
    <Setter Property="Grid.Row" Value="2" />
    <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled" />
    <Setter Property="ItemsPanel" Value="{StaticResource WrapItemsPanel}" />
    <Setter Property="ItemTemplate" Value="{StaticResource ToDoAndDoneItems}" />
Style>
<ListBox x:Name="lbToDo" />
<ListBox Grid.Column="1" x:Name="lbInProgress" ItemTemplate="{StaticResource InProgressItems}" />
<ListBox Grid.Column="2" x:Name="lbDone" />
Мне кажется значительно лучше.

Ну и второй пример:
List<WorkItem> tasks = null;

if (cbIterations.IsEnabled && cbIterations.SelectedItem != null)
{
 WorkItem sprint = (WorkItem)cbIterations.SelectedItem;
 tasks = _allWorkItems.Where(wi => (wi.Type.Name == "Task" || wi.Type.Name == "Bug") && wi.IterationPath == sprint.IterationPath).ToList();
}
else if (!cbIterations.IsEnabled)
{
 tasks = _allWorkItems.Where(wi => wi.Type.Name == "Task" || wi.Type.Name == "Bug").ToList();
}
else
{
 tasks = new List<WorkItem>();
}
В принципе, все понятно, но лучше, да и ошибок будет меньше вот при таком варианте:
private static bool IsTaskOrBug(WorkItem wi)
{
 return wi.Type.Name == "Task" || wi.Type.Name == "Bug";
}
...

List<WorkItem> tasks = null;
 
if (cbIterations.IsEnabled && cbIterations.SelectedItem != null)
{
 WorkItem sprint = (WorkItem)cbIterations.SelectedItem;
 tasks = _allWorkItems.Where(wi => IsTaskOrBug(wi) && wi.IterationPath == sprint.IterationPath).ToList();
}
else if (!cbIterations.IsEnabled)
{
 tasks = _allWorkItems.Where(wi => IsTaskOrBug(wi)).ToList();
}
else
{
 tasks = new List<WorkItem>();
}

Хотя во втором случае я видимо уже эстетствую ))

Комментариев нет:

Отправить комментарий