<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _define_structure_view(data_type):
 """Define a new view object for a `Structure` type."""

    def define_getter(field_index, field_type, field_view):
        if field_view is None:
            def getter(self):
                return self._data[field_index]
        elif isinstance(field_type, _ATOMIC):
            def getter(self):
                return field_view(self._data, field_index)
        else:
            def getter(self):
                return field_view(self._data[field_index])

        return getter

    def define_setter(field_index, read_only):
        def setter(self, value):
            self._data[field_index] = value

        return None if read_only else setter

    field_views = [_resolve_view(field.type) for field in data_type.fields]
    mixins = (_StructuredViewMixin,)
    attributes = _get_mixin_attributes(mixins)
    attributes.update({
        '_fields': tuple(field.name for field in data_type.fields),
    })
    attributes.update({
        field.name: property(
            fget=define_getter(i, field.type, field_view),
            fset=define_setter(i, field.read_only),
            fdel=None)
        for i, (field, field_view)
        in enumerate(zip(data_type.fields, field_views))})
    name = data_type.name if data_type.name else 'StructureView'
    return type(name, (), attributes)